[cpp-threads] sequential consistency for race-free programs

Alexander Terekhov alexander.terekhov at gmail.com
Sat Jul 16 15:21:51 BST 2005


On 7/15/05, Doug Lea <dl at cs.oswego.edu> wrote:
[...]
> It seems that in principle "no speculative stores"  could  someday 
> be formalizable if someone  wants to put a lot  of effort into it.

Informally, it simply means that loads have implicit ddhsb+cchsb.

It would make

     #include <stdio.h>
     #include <pthread.h>

     pthread_rwlock_t rwlock;

     int var;

     void * thread(void *) {
       pthread_rwlock_rdlock(&rwlock);
       if (var) var = 0;
       //pthread_rwlock_unlock(&rwlock);
       return 0;
     }

     int main() {
       pthread_t tid;
       pthread_rwlock_init(&rwlock, 0);
       pthread_rwlock_wrlock(&rwlock);
       pthread_create(&tid, 0, thread, 0);
       var = 1;
       pthread_rwlock_unlock(&rwlock);
       pthread_join(tid, 0);
       printf("%d\n", var);
     }

data-race-free vs data-race-UNfree

     #include <stdio.h>
     #include <pthread.h>

     pthread_rwlock_t rwlock;

     int var;

     void * thread(void *) {
       pthread_rwlock_rdlock(&rwlock);
       /*if (var) */ var = 0;
       //pthread_rwlock_unlock(&rwlock);
       return 0;
     }

     int main() {
       pthread_t tid;
       pthread_rwlock_init(&rwlock, 0);
       pthread_rwlock_wrlock(&rwlock);
       pthread_create(&tid, 0, thread, 0);
       var = 1;
       pthread_rwlock_unlock(&rwlock);
       pthread_join(tid, 0);
       printf("%d\n", var);
     }

Oder?

regards,
alexander.




More information about the cpp-threads mailing list