title: Kotlin coroutines "happens-before" guarantees?
body: <p>Do Kotlin coroutines provide any "happens-before" guarantees?</p>
  
  <p>For example, is there "happens-before" guarantee between write to <code>mutableVar</code> and subsequent read on (potentially) other thread in this case:</p>
  
  <pre><code>suspend fun doSomething() {
      var mutableVar = 0
      withContext(Dispatchers.IO) {
          mutableVar = 1
      }
      System.out.println("value: $mutableVar")
  }
  </code></pre>
  
  <p>Edit:</p>
  
  <p>Maybe additional example will clarify the question better becuase it's more Kotlin-ish (except for mutability). Is this code thread-safe:</p>
  
  <pre><code>suspend fun doSomething() {
      var data = withContext(Dispatchers.IO) {
          Data(1)
      }
      System.out.println("value: ${data.data}")
  }
  
  private data class Data(var data: Int)
  </code></pre>