- 当线程调用pthread时,他所能看见的内存值也是它建立的线程能够看到的,任何在pthread_create之后向内存写入的数据可能不会被建立的线程看到,即使写操作发生在启动线程之前
- 当线程解锁互斥量时看到的内存数据,同样能被后来直接锁住(或通过等待条件变量锁住)相同互斥量的线程看到。同样,在解锁互斥量之后写入的数据不必被其他线程看见,即使写操作发生在其他线程锁住互斥量之前。
- 线程终止(或通过取消操作,或从启动函数中返回,或调用pthread_exit())时看到的内存数据,同样能够被链接该线程的其他线程(通过pthread_join())看到,终止后写入的数据不会被其他线程看到,即使写操作发生在连接之前
- 线程发信号或广播条件变量时看到的内存数据,同样可以被唤醒的其他线程看到,而在发信号或广播之后写入的数据不会被唤醒的线程看到,即使写操作发生在线程被唤醒之前。
- 线程寄存器变量不能被其他线程修改;线程分配的堆栈和堆空间是私有的,除非线程将指向该内存的指针传递给其他线程;任何放在register和auto变量中的数据可以再随后的某个时刻读取,就想完全同步的数据一样,每个线程自己是同步的,线程*享的数据越少需要做的工作越多。
线程1 pthread_mutex_lock(&mutex); a=1; b=2; pthread_mutex_unlock(&mutex); 线程2 pthread_mutex_lock(&mutex); local_a=a; local_b=b; pthread_mutex_unlock(&mutex); 从pthread_mutex_unlock()到pthread_mutex_lock()之间可视化 当线程b从pthread_mutex_lock()中返回时,他将和线程a调用 pthread_mutex_unlock()看到同样变量的值。即相应的1和2
线程1 pthread_mutex_lock(&mutex); a=1; pthread_mutex_unlock(&mutex); b=2; 线程2 pthread_mutex_lock(&mutex); local_a=a; local_b=b; pthread_mutex_unlock(&mutex); 从pthread_mutex_unlock()到pthread_mutex_lock()之间可视化 当线程b从pthread_mutex_lock()中返回时,他将和线程a调用 pthread_mutex_unlock()看到同样变量的值。即local_a相应的1, local_b的值,因为他是在解锁互斥量之后写入的。