【发布时间】:2019-12-10 02:45:59
【问题描述】:
假设有一个函数(一组指令 foo())可以操作一些数据(全局)。两个线程由每个执行此函数(foo())的进程产生。 当这两个线程在两个不同的处理器内核上同时执行时,如何处理并发和数据保护(竞争条件)?
对于并发和数据保护,上述情况下单核和多核处理器的主要区别是什么?
【问题讨论】:
-
在用户模式设置中,多核多处理有点像最坏情况下的单核多处理。有很多方法可以处理并发。其中之一是使用 C11 的
<stdatomic.h>。在 POSIX 上,有 pthread mutexes -
这两种情况的主要区别在于缓存。但是,如果您采取了所有正确的内存保护预防措施,并在所有正确的位置使用互斥锁,那么人们会期望实现能够确保使用内存屏障和缓存刷新。
-
已经有关于这个主题的书籍。这个问题远太宽泛了。
-
我从“Unix 网络编程,第 1 卷:套接字网络 API(第 3 版)”中学到了关于用 C 语言编写线程程序的大部分知识。
标签: c linux multithreading posix