jmi*_*ich 10 multithreading race-condition
根据IBM.com 上的一篇文章,"竞争条件是两个或多个线程或进程正在读取或写入一些共享数据的情况,最终结果取决于线程的调度时间.竞争条件可以导致无法预测的结果和微妙的程序错误." .虽然这篇文章涉及Java,但我一般都被教导了相同的定义.
据我所知,从RAM读取的简单操作包括设置特定输入行(地址,读取等)的状态和读取输出行的状态.这是一个显然不能由两个设备同时执行并且必须被序列化的操作.
现在让我们假设我们遇到一些线程访问内存中的对象的情况.从理论上讲,这种访问应该被序列化以防止竞争条件.但是,例如读者/编写者算法假设任意数量的读者可以同时使用共享内存.
所以,问题是:在使用多线程时(例如在WinAPI中)是否必须实现读取的独占锁?如果没有,为什么?这个控件在哪里实现 - 操作系统,硬件?
最好的问候,库巴
在硬件级别读取内存是按顺序完成的 - 您无需担心此级别的并发性.两个线程发出读取指令和所有必要的东西 - 地址总线上的设置地址和实际读取由存储器访问硬件实现,使得读取始终正常工作.
实际上,对于读/写方案也是如此,除了当读取和写入请求是交错的时,您将根据时序获得不同的结果,这就是您需要同步的原因.
只要没有更改数据,从多个线程读取数据就完全安全。即使两个CPU(或核心)在完全相同的时钟周期竞相访问内存进行读取,它们的访问也会被内存控制器串行化,并且不会互相干扰。此功能对于硬件正常工作至关重要。
归档时间: |
|
查看次数: |
2886 次 |
最近记录: |