1
3
这是 条件变量 在线程2运行处理之前,该值可以在线程1中轻松更新多次,这是一个小问题:
|
2
1
很好的锻炼。
您尚未指定
正如你的面试官所指出的,同步必须在两个方向上进行:
因此,我们需要一些东西让我们知道打印机已经完成了(这样递增器就可以运行),另一个让我们知道递增器已经完成了。我使用了两个信号灯:
(我移除了周围的试块/挡块
输出:
|
3
0
问题:一般来说,并行代码有两个主要问题。 1、原子性
事实上,代码中最小的粒度并不是像
但幸运的是,c++提供了
2、一致性 编译器和处理器都可以对任何指令重新排序,只要 地方的 线程被保留。那么这意味着什么呢? 看看你的第一条线索
您有3个操作
但c++再次为这个问题提供了一个内置的解决方案,称为
解决:
简单互斥体:
互斥锁是一个简单但功能强大的工具。它通过提供所谓的阻止并行执行的关键部分来解决原子性和一致性问题。这意味着,在给定的示例中,两个线程中的if子句是连续的,永远不会并行执行。
实现工作正常,但有一个缺陷。如果其中一个线程非常慢,那么另一个线程将通过连续检查
条件变量 :
条件变量基本上只是一个“等待通知”构造。您可以通过调用
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |