不同步访问共享内存可以暂停进程或线程?

时间:2013-01-29 04:01:11

标签: multithreading concurrency shared-memory scheduler

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

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

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

任务计划程序将任务推送到工作人员队列。

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

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

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

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

因此每个变量都有一个读取和一个写入器。

这是R-W问题,我需要一个互斥锁。

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

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

是否有任何问题,没有不准确的值?

1 个答案:

答案 0 :(得分:0)

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

像这个问题一样通用,答案可能是任何事情。你不妨问一下“如果我做了一些我不应该做的事情会发生什么?”

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