线程访问全据变量
由于比较着急我在unixchina和csdn发了贴, 请见谅
对于全局变量所有的线程都是read only,
但是读的结果不正确, 我将全局变量地址通过pthread_create的参数传递给thread结果正常, 这是为甚么呢
哦, 忘了给分了,
恩``回答出来了我开贴送分
[解决办法]
能具体说说!
全局变量是线程共享,应该作为临界资源进行互斥管理
用参数传入其它线程,是不是会在另外线程中隐式产生一个局部变量导致它与全局变量脱离呢!?
[解决办法]
全局变量在多线程中访问一定要互斥
如果没记错,传递给线程的参数是个指针吧? 估计没法像楼上想的那样直接隐式脱离了
[解决办法]
多线程访问全局变量,出问题主要是有线程写,有线程读,造成全局变量没有写完成就被别的线程读取,而读到的值就是不正确的。 若有多线程写的话,就更容易造成最终写的结果不正确。
所以多线程访问全局变量,应该使用互斥量进行互斥。
[解决办法]
读的结果不正确是不可能的,肯定还是你某个地方用错了,再找找吧
怎么个错误法?
[解决办法]
感觉是有点奇怪,既然线程对全局变量都只有读权限,怎么会读不正确呢?估计是什么地方有线程进行写了把。还有你那个全局变量是volatile的吗
[解决办法]
2.6 和 2.4 的 pthread库的实现不一样,不过我也没有试过你这个方法
最好能有简化代码来调调看
[解决办法]
放在 GDB 里跑,给全局变量下个 watch 看看