- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
对于 pthread_cond_t,我们必须关联一个互斥体,当发出条件信号时,我看到了如下代码
pthread_mutex_lock(&mutex);
//code that makes condition true
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
和
pthread_mutex_lock(&mutex);
//code that makes condition true
pthread_mutex_unlock(&mutex);
pthread_cond_broadcast(&cond);
哪一个是正确的方法? (有关系吗?)
最佳答案
取决于接收器(以及任何其他来源)在做什么。
在您的第二个代码示例中,在解锁和广播之间,可能会出现许多其他线程并执行一些组合操作,从而使条件再次为假。然后你就会毫无意义地广播。并且您不一定会拥有与更改条件时相同的一组服务员,这可能会或可能不会影响您的设计。
一个体面的接收器不应该关心它是否被唤醒并且条件为假,尤其是当您使用广播时。只要每次将条件更改为“true”最终都会进行广播,我很确定使用适当编写的接收器,无论有无锁定,您都可以随意广播条件变量。
所以我认为这并不重要,但就我个人而言,我会在锁定的情况下进行广播,即使只是为了避免担心。与“改变......稍后发出信号”相比,“原子变化和信号”可能会简化白板上的状态图。
两者都是正确的(不像没有互斥量的等待,这是不允许的),但我认为在第二种情况下想出可能出错的用途不会太难,那不会一开始就错了。不过,他们可能不得不让一些服务员做一些稍微不寻常的事情。
规范相当隐晦地说“如果需要可预测的调度行为,则该互斥量应由调用 pthread_cond_broadcast() 或 pthread_cond_signal() 的线程锁定。”
http://www.opengroup.org/onlinepubs/009695399/functions/pthread_cond_signal.html
关于调用 pthread_cond_broadcast 是否持有互斥量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1105250/
来自 Java/C# 背景,我正在尝试实现一个空安全检查对象。以下代码尝试检查对象上是否确实存在颜色。如果有,我希望能够做一些事情(比如在形状上绘制颜色)。我希望能够将此颜色设置回 null (non
目前,我正在使用来自 Boost Vault 的类型安全枚举类: Which Typesafe Enum in C++ Are You Using? 我发现很难有一个父类指针来引用所有枚举类,因为 B
假设我设置了一个存储库。我希望有的用户可以推送,有的用户我想先过一遍推送的内容再批准。有条件推送之类的概念吗?待批准推送队列? 最佳答案 您本质上需要一个代码审查工具。 git 有一些,但最好的可能是
我使用 Windows 版 git bash 和 Beyond & Compare 作为我的差异工具(但同样的事情发生在任何外部差异工具上)。 我希望我的终端不要等待 difftool 退出以返回终端
这个问题在这里已经有了答案: SVN: Is there a way to mark a file as "do not commit"? (18 个回答) 8年前关闭。 在某些情况下,作为开发环境设
Jcombobox 可以保存 int 吗?因为我尝试了这个并收到错误。 int[] timeSched = new int[] {200,300,400,500}; JComboBox Jcombo1
最近,我开始为我的游戏制作 map 编辑器,遇到了一些问题,我已经解决了这些问题。我现在的问题是我有一个 JFrame (主界面)。在该 JFrame 中,我有一个 JScrollPane,其中包含我
ElementAdapter类 package com.example.sierendeelementeninbreda; import android.content.Context; import
我能以某种方式将 jquery 对象作为 javascript 对象的键吗? (编辑)..作为关键.. var $a = $("#a"); var $b = $("#b"); var c = {};
我分两步解码 jpeg。 检查边界,必要时确定比例。 在屏幕限制内解码。 public static Bitmap decodeSampledBitmapFromInputStream(InputSt
谁能告诉我为什么下面代码中 $mytextarea 的范围没有扩展到 getAnswerToo() 函数中? getAnswer() 之所以有效,是因为我明确选择了要更新的元素。但是,尝试使用全局“处
如果我有实现接口(interface) I 的类 A 并将它传递到需要接口(interface) I 的地方,例如传递给线程,将这会阻止 GC 对 A 类的实例进行垃圾回收?我想是的,但我该如何解决呢
我正在使用 Swift3 和 Xcode 8.3.3 我正在研究持有 UICollectionView 的 UITableViewCell。每个 CollectionView 单元格都需要执行 seg
我正在使用 CVMetalTextureCacheCreateTextureFromImage 从 CVImageBuffer(来自相机和播放器)创建一个 MTLTexture 以获得 CVMetal
我有三个类:HopBill、HopBillController 和 HopBillSheetController。 HopBill 创建一个包含 NSMutableArray 的对象。出于测试目的,我
一些 Powermock/Mockito 文章提到了使用 PowerMock.mockStaticPartial 方法 - 唯一的问题是我在任何地方都找不到它! 有谁知道它存在于哪个 Artifact
我有一个显示新闻条目详细信息的 ViewPager。您可以在 30 个条目之间来回滑动。这些条目中的每一个都是一个包含 ImageView 的 View 。此 ImageView 使用 Picasso
操作应尽量保持与原始输入类型相同的答案,因此如果持有者以 Double 开头,则结果也应该是 double。 如果输入包含不同数字类型的持有者,那么它应该自动加宽等。 应该有一种带有 getter 的
比如,如果我编写如下所示的代码: const int & const_value = 10; 与看起来像这样的代码相比,我有什么优势: int value = 10; 或 const int cons
我在 Windows XP(代码:Block,MinGW)和 Ubuntu(11.04,G++)上运行了以下两段代码 我无法运行以下代码 #include using namespace std;
我是一名优秀的程序员,十分优秀!