-1

总结:有一个读线程和一个写线程访问同一个内存空间,但没有同步。是否存在任何运行时错误(非逻辑错误)或破坏进程或线程的风险?

我正在尝试制作一个简单的任务调度程序。

有一些工作线程,它们有自己的任务队列。

任务调度程序将任务推送到工作队列。

我希望调度程序知道最不忙的线程,其队列最短。

所以我需要一些共享整数变量来存储每个队列的长度。

每个工作线程将自己的队列长度写入特定变量。

调度程序读取这些变量以了解最短的变量。

所以每个变量都有一个读和一个写。

这是 RW 问题,我需要一个互斥锁。

但我不想要任何开销并且知道队列的确切长度。

所以我想让线程在不同步的情况下访问共享值。

有什么问题,没有不准确的价值?

4

1 回答 1

0

没有法律规定,对于所有平台、所有语言和所有标准,当两个线程在没有同步的情况下访问相同的内存空间时必须发生什么。一些平台可能允许它并自己添加同步。这不是不可能的。有些人可能会在所有情况下对其进行测试,并保证该过程会崩溃。这也不是不可能。

尽管这个问题很笼统,但答案可能是任何东西。你不妨问“如果我做了不该做的事会怎样?”

例如,POSIX 允许进程崩溃。对于对齐的 32 位访问,Win32 要求它在最坏的情况下提供过时的值。没有普遍规律。

于 2013-01-29T04:21:51.937 回答