多线程的模块,需要一个锁对象,或者将“步骤组”本身做成原子性的操作

功能建议 · 323 次浏览
凌心诚 创建于 2021-01-21 05:30

凡是要用多线程,就很难绕过多个线程读写同一变量的情况,所以必须要有一个锁的操作。

我自己写了个自旋锁,但因为有一步缺少原子性操作,只好用随机数暂时顶替,这样就存在间歇性Bug。

所以,还是希望能有一个锁的函数,或者能将“步骤组”附加带有原子性的操作也可以。

我是实在没办法了,因为确实不懂C#,JavaScript也是半桶水。。


回复 x
回复内容
CL 2021-01-21 07:25
#1

没有的。 

变量冲突问题:将变量值传入子程序,每个子程序内部变量是独立的。

具体是什么样的场景需求呢?


CL 最后更新于 2021-01-21 07:32

就是我有两(多)个线程,要读写一个全局变量(列表、或字典),但读写这个全局变量的时候,一个线程在读写,另一个线程就不能读写了(怕同时操作变量有冲突),必须在临界区外面等。所以就只好需要一个线程锁,来锁这个全局变量。大部分的多线程操作,都需要这个锁来保证对变量的操作不要冲突,本来我写了一个自旋锁,但这里缺少原子性操作,所以这个锁就有bug

凌心诚 2021-01-21 15:22
回复 CL :

感谢回复,问题已经解决

凌心诚 2021-01-22 03:00
回复 x
CL 2021-01-21 19:38
#2
回复 凌心诚 :

就是我有两(多)个线程,要读写一个全局变量(列表、或字典),但读写这个全局变量的时候,一个线程在读写,另一个线程就不能读写了(怕同时操作变量有冲突),必须在临界区外面等。所以就只好需要一个线程锁,来锁这个全局变量。大部分的多线程操作,都需要这个锁来保证对变量的操作不要冲突,本来我写了一个自旋锁,但这里缺少原子性操作,所以这个锁就有bug

操作词典里面不同的键一般没有问题。其他还是要尽量避免冲突了。quicker的多线程只适合比较简单的场景,不适合线程之间有交互的情况。


回复 x
回复主贴