pthreads中的内存模型规范

Tob*_*zau 4 c c++ multithreading pthreads shared-memory

当一个线程中的内存写入何时在使用pthreads的其他线程中可见时,是否有任何保证?

与Java相比,Java语言规范有一个部分,它指定了锁和内存的交互,使得编写可移植的多线程Java代码成为可能.

是否有相应的pthreads规范?

当然,你总是可以让共享数据变得易变,但这不是我追求的.

如果这取决于平台,是否有事实上的标准?或者应该使用另一个线程库?

R..*_*R.. 7

POSIX指定4.11内存同步中的内存模型:

应用程序应确保限制多个控制线程(线程或进程)对任何内存位置的访问,以便没有控制线程可以读取或修改内存位置,而另一个控制线程可能正在修改它.使用同步线程执行的函数以及相对于其他线程同步内存来限制这种访问.以下函数使内存与其他线程同步:

  • 叉子()
  • pthread_barrier_wait()
  • 调用pthread_cond_broadcast()
  • 调用pthread_cond_signal()
  • 那么pthread_cond_timedwait()
  • 调用pthread_cond_wait()
  • 在pthread_create()
  • 在pthread_join()
  • pthread_mutex_lock()的
  • pthread_mutex_timedlock()
  • pthread_mutex_trylock()
  • 调用pthread_mutex_unlock()
  • pthread_spin_lock()
  • pthread_spin_trylock()
  • pthread_spin_unlock()
  • pthread_rwlock_rdlock()
  • pthread_rwlock_timedrdlock()
  • pthread_rwlock_timedwrlock()
  • pthread_rwlock_tryrdlock()
  • pthread_rwlock_trywrlock()
  • pthread_rwlock_unlock()
  • pthread_rwlock_wrlock()
  • sem_post()
  • sem_timedwait()
  • sem_trywait()在
  • sem_wait()
  • 了semctl()
  • 为semop()
  • 等待()
  • waitpid函数()

对于给定的pthread_once_t对象,pthread_once()函数应为每个线程中的第一个调用同步内存.

如果互斥锁类型是PTHREAD_MUTEX_RECURSIVE并且调用线程已经拥有互斥锁,则pthread_mutex_lock()函数不需要同步内存.如果互斥锁类型为PTHREAD_MUTEX_RECURSIVE且互斥锁的锁定计数大于1,则pthread_mutex_unlock()函数无需同步内存.

除非另有明确说明,否则如果上述函数之一返回错误,则不指定调用是否导致内存同步.

应用程序可以允许多个控制线程同时读取存储器位置.