smw*_*dia 5 multithreading atomic
假设有3个线程,
线程 1 和 2 将原子地增加或减少全局变量 X。
线程 1:
atomic_increase(X)
Run Code Online (Sandbox Code Playgroud)
线程2:
atomic_decrease(X)
Run Code Online (Sandbox Code Playgroud)
线程 3 将检查 X 是否大于某个预定义值并执行相应操作。
线程 3:
if( X > 5 ) {... logic 1 ...}
else {... logic 2 ....}
Run Code Online (Sandbox Code Playgroud)
我认为atomic_xxx操作还不够。它们只能同步线程1和线程2之间的修改。
如果在线程 3 完成比较并进入 后,X被线程 1 或 2 改变怎么办? logic 1
修改或读取时是否必须使用互斥锁来同步所有 3 个线程X?
顺便说一句,逻辑 1 和逻辑 2 不会修改 X。
简而言之,是的,读取也需要以某种方式同步,否则读取不一致的风险是真实存在的。读和写之间执行的读atomic_increase将会不一致。
然而,如果logic 1或logic 2do stuff to X,你的问题似乎并不止于此。我认为那么你需要事务的概念,它以读取(X > 5事物)开始,然后以写入(logic 1或logic 2)结束。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |