s****n 发帖数: 700 | 1 我有一结构体 ORDER od, 是很多thread可以对它进行读写
每次对它读写的时候,我都是这样的
lock()
ORDER &oo = od;
unlock()
我现在问题是, 以后我用oo的时候, 别的thread改动了od, 我的oo值会不会相应变化。
如果是, 我是不是必须这样来做
lock()
ORDER oo;
Copy(oo, od);
unlock()
谢谢解答 |
j*******d 发帖数: 8834 | 2 你这lock不lock有啥意义哈?
od一动,你的reference还能不变吗?
copy是可以,你不嫌贵吗?
你要access od来干嘛? |
s****n 发帖数: 700 | 3 取出od是为了作为一个函数的参数, 这个函数我并不想lock. 因为我不知道这样是不
是也消耗很多时间。
这种情况您有什么好的办法么?
【在 j*******d 的大作中提到】 : 你这lock不lock有啥意义哈? : od一动,你的reference还能不变吗? : copy是可以,你不嫌贵吗? : 你要access od来干嘛?
|
s**********o 发帖数: 197 | 4 如果怕耗时间的话,可以在函数里relaease一下,给其他线程一个机会。
【在 s****n 的大作中提到】 : 取出od是为了作为一个函数的参数, 这个函数我并不想lock. 因为我不知道这样是不 : 是也消耗很多时间。 : 这种情况您有什么好的办法么?
|
j*******d 发帖数: 8834 | 5 那你要看这个func干些啥了,如果只是一些pure userland的processing,而且不heavy,lock有啥不可?
我不知道copy od有多expensive, 而且ORDER这个class能被copy吗?有自己的copy
constructor吗?或者,如果那个func会call 一些ORDER的non-const methods,那od本身就会被改变,你还得copy回去吧?如果要copy 回去岂不是明白的race condition
【在 s****n 的大作中提到】 : 取出od是为了作为一个函数的参数, 这个函数我并不想lock. 因为我不知道这样是不 : 是也消耗很多时间。 : 这种情况您有什么好的办法么?
|