线程的内存可视化

原创 2012年03月27日 16:33:00

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

在实际应用的使用方法:

首先,确保哪些可能的地方只有一个线程能访问某段数据。线程的寄存器变量不能被其他线程修改。线程分配的堆栈和堆空间是私有的,除非线程将指向该内存的指针传给其他线程。任何放在register或auto变量中的数据可以在随后的某时刻读取,就像在完全同步的程序中一样。在线程间共享的数据越少,需要做的工作越多。

其次,任何时候两个线程需要访问相同数据时,你就需要应用其中一条内存可视化规则,大多数情况下是指使用互斥量,这不仅是为了保护多个写操作,即使线程是读数据,它也需要锁住互斥量以确保读到最新的数据值。
有一些特别的情况下不需要使用互斥量来确保可视性。如果线程设置了一个全局变量,然后创建了一个新线程读取同一个变量,则新线程将看不到旧的变量值(只能看到改过的新的变量值)。但是,若你创建了一个新线程然后再设置变量的值,则新线程可能看不到新的变量值,即使原线程在新线程读取数据之前向变量内写入了新值。


Unity3D 海水多线程渲染算法实现

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等...
  • jxw167
  • jxw167
  • 2017年07月21日 17:27
  • 641

Java中使用jvisualvm进行可视化内存分析

在前面我们说过java中的GC的相关内容: JVM中的flag设置 理解GC日志 Java垃圾收集算法 图解Java中的GC(分代收集器) 下面来说说可视化的GC工具-jvisualvm,...

Redis高速内存缓冲平台可视化监控之RedisLive

文章转自:http://www.cnblogs.com/mahatmasmile/p/5039084.html首先下载安装python的运行环境(Python官网:https://www.python...

可视化调试:基于共享内存发送数据

大多算法都有自己特定的数据流程,给调试带来麻烦。 如果在几个关键节点,能够把当前数据发送给外部的显示程序实时显示,很多问题都能一目了然。 在进程之间传递数据的最好手段,应该是共享内存了。当然发送者...
  • xlh9718
  • xlh9718
  • 2013年06月15日 11:39
  • 513

vmmap 观察jvm内存 监控jvm jvm线程

  • 2017年03月20日 14:44
  • 413KB
  • 下载

MOOC清华《VC++面向对象与可视化程序设计》第5章:图标资源例程

#include #include #include long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); BOO...

MOOC清华《VC++面向对象与可视化程序设计》第5章:菜单资源例程(创建统计计算菜单项)

#include "windows.h" #include "001.h" HMENU hmenu,haddmenu; //定义菜单句柄 LRESULT ...

MOOC清华《VC++面向对象与可视化程序设计》第4章:鼠标操作例程(灰白选框)

#include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE h...

MOOC清华《VC++面向对象与可视化程序设计》第4章:键盘操作例程(五个对话框)

#include long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); BOOL InitWindowsClass...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程的内存可视化
举报原因:
原因补充:

(最多只允许输入30个字)