[问题] 关于互斥的问题

楼主: asdfg1597860 (Jay)   2020-06-11 22:05:20
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VS2015
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
各位前辈好
小弟我有一个问题想问
如果我有一个类别
里面有一个变量及2个函式(1个取变量的值,1个改变变量的值)
用两个thread 去跑这两个函示 ,会有机率造成资源互抢吗?(再写值时被取值的状况)
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
Class A
{
public:
int get();
void update(int input);
private:
int value;
}
int A::get()
{
return value;
}
void A::update(int input)
{
value = input;
}
补充说明(Supplement):
类别的结构在上方
主程式会有全域的类别物件 A itemA;
然后开两条Thread ,一条呼叫itemA.update(乱数) ,一条呼叫itemA.get()
想请问前辈们,这状况下有可能会资源互抢吗
目前测试是没有发生
但感觉时间拉长可能会有机率
作者: ucrxzero (RX-0)   2020-06-11 22:32:00
lock 再wait 还会吗
作者: Lipraxde (Lipraxde)   2020-06-12 07:53:00
会,不过 int 太小了所以在 x86 上这样应该观察不出来印象中 x86 在 read/write 对齐的 word 时是 atomic 的即使是如此 lock 也是无法取代的,因为 lock 的实作需要 read modify write
作者: FY4   2020-06-13 00:28:00
用mutex保护吧
作者: icetofux   2020-06-13 00:42:00
用std::atomic包装你的变量应该能解决这个问题

Links booklink

Contact Us: admin [ a t ] ucptt.com