zoukankan      html  css  js  c++  java
  • posix thread内存可视性

    线程间的内存可视性

    • 当线程调用怕thread——create时, 它所能看到的内存值也是它建立的线程能够看到的。任何在调用怕thread_create之后写入的数据,可能不会被建立的线程看到,即使写操作发生在启动新线程之前。
    • 当线程解锁互斥量时候看到的内存数据,同样也能被后来直接锁住(或通过等待条件变量锁住)相同的互斥量的线程看到。同样,在解锁互斥量之后写入的数据不必被其他线程看见,即使写操作发生在其他线程锁互斥量之前。
    • 线程终止时(或通过取消操作,或从启动函数中返回,或调用pthread_exit)看到的内存数据,同样能够被连接该线程的其他线程看到。当然,终止后写入的数据不会被连接线程看到,即使写操作发生在连接之前。
    • 线程发信号或广播条件变量时看到的内存数据,同样可以被唤醒的其他线程看到。而在发信号或广播之后写入的数据不会被唤醒的线程看到,即使写操作发生在线程被唤醒之前。

    正确示例:

    pthread_mutex_lock(&mutex1)
        variableA = 1;
        variableB = 2;
    pthread_mutex_unlock(&mutex1)
    
    pthread_mutex_lock(&mutex1)
        localA = variableA; /* variableA = 1 */
        localB = variableB; /* variableA = 2 */
    pthread_mutex_unlock(&mutex1)

    错误示例:

    pthread_mutex_lock(&mutex1)
        variableA = 1;
    pthread_mutex_unlock(&mutex1)
        variableB = 2;
    
    pthread_mutex_lock(&mutex1)
        localA = variableA; /* variableA = 1 */
        localB = variableB; /* variableA = 2 */
    pthread_mutex_unlock(&mutex1)
  • 相关阅读:
    发现对各类项目有用的不同JavaScript的Web UI
    PowerDesigner 15.1 安装步骤详细图解及破解
    数据库设计工具PowerDesigner基础普及
    Vistual Studio 2010(VS2010)安装 MVC3.0具体方法
    pb的网络资源【转】
    powerbuider11 C/S 转换为B/S
    转:将可执行文件注册成系统windows服务
    WCF绑定类型选择(转)
    (转)找增强方法总结
    ALV简单模板1
  • 原文地址:https://www.cnblogs.com/licongyu/p/5061291.html
Copyright © 2011-2022 走看看