问题标签 [unique-lock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 此代码异常处理是否正确?
在下面的代码中,事件可能会抛出异常并且它可能不会在偶数处理程序中处理,(罕见但仍然如此)
我希望在执行事件时保持“lck2”解锁,因为我不希望“mtx2”的主线程阻塞,原因无非是优化。
我可以保证“lck2”总是在 catch 块中释放吗?或者可能存在运行时异常,因此可能导致死锁或一些意外行为?
c++ - 在同一个互斥体上使用两个 std::unique_lock 会导致死锁?
我在代码审查堆栈交换中找到了这段代码,它实现了生产者-消费者问题。我在这里发布一段代码。
在给定的代码中,让我们考虑一个场景,当生产者通过调用产生一个值时void add(int num)
,它获取了互斥锁mu
, buffer.size()==size_
这使得生产者由于条件变量而进入等待队列cond
。
同时,发生上下文切换,消费者调用函数int remove()
来消费 value ,它试图获取 mutex 上的锁mu
,但是锁之前已经被生产者获取,所以它失败并且永远不会消费 value,从而导致僵局。
我在哪里错了?因为当我运行它时代码似乎可以正常工作,所以调试它并没有帮助我。
谢谢
multithreading - 线程通知不适用于我的消费者
我有一个生产者/消费者的尝试
制片人
消费者
邮箱
主要的
互斥锁虽然是异步工作的,因为我无法控制 astd::thread
何时开始,所以我决定使用std::unique_lock
除了std::mutex
.
问题是,消费者等待,生产者在没有通知的情况下继续前进,至少这是调试器告诉我的,最后一次生产者迭代结果是 abort() 所以这里出了点问题。
multithreading - 一个线程中应该使用多少互斥锁
我正在处理一个 c++ (11) 项目,在主线程上,我需要检查两个变量的值。这两个变量的值将由其他线程通过两个不同的回调来设置。我正在使用两个条件变量来通知这两个变量的变化。因为在 C++ 中,条件变量需要锁,我不确定是否应该为两个条件变量使用相同的互斥锁,或者我应该使用两个互斥锁来最小化独占执行。不知何故,我觉得一个互斥体就足够了,因为在一个线程(在这种情况下为主线程)上,代码无论如何都会按顺序执行。检查(等待)两个变量值的主线程上的代码无论如何都不会交错。如果您需要我编写代码来说明问题,请告诉我。我可以准备那个。谢谢。
更新,添加代码:
c++ - 在简单的生产者和消费者中使用 unique_lock 的困难
我根据 C++11 注释编写了一个非常简单的 Producer/Consumer,无法弄清楚为什么 unique_lock() 在超出范围时不释放锁。
并将其用作:-
输出是: -
所以从技术上讲,是的,生产者需要告诉消费者我准备好了,消费者需要让生产者知道发送更多数据。我不清楚要使用什么,条件变量是这样做还是 unique_lock 是这样做的。
确切地说,当范围可以释放锁时,为什么我需要(1)和(2)
==编辑== 以下是编辑后的代码,效果很好,
现在,如果我想在 Producer 或 Consumer 如果 sleep 有风险,我该如何引入一点节流?
compilation - unique_lock 编译错误大括号初始值设定项
我很困惑...
因此,我有一段代码;
“unique_lock < std::mutex > lk (mut)” 行编译失败,出现此错误;
**g++ -pthread --std=c++11 main.cxx main.cxx:42:31: error: mut is not a type
unique_lock<std::mutex> lk(mut);**
但是,如果我将其更改为...(请注意大括号初始化程序是唯一的区别)
它编译得很好。
我有其他代码使用工作/编译良好的非大括号初始化程序进行初始化。到底为什么会这样,也许我累了:)
干杯
G
c++ - 当相同的互斥锁与其他地方的 lock_guard 一起使用时,等待/通知 unique_lock 互斥锁是否安全?
我正在使用以下等待/信号方式让线程相互通知。
然后将锁定/解锁机制从 unique_lock 转换为 lock_guard,因为我没有返回 unique_lock 以在其他地方使用(等待/信号除外),并且据说 lock_guard 的开销更少:
它有效。
这适用于所有平台还是看起来适用于当前平台?unique_lock 和 lock_guard 可以使用相同的互斥对象相互工作吗?
c++ - 在单个线程中拥有多个读取器锁
我有数据加上一个Lock = boost::shared_mutex
. 我正在锁定数据访问
读卡器锁 ReadLock = boost::shared_lock<Lock>
和 作家锁 WriteLock = boost::unique_lock<Lock>
。
显然,可能有很多读者一次读取数据,而只有一个人在写入。但这里有一个问题:
单个线程可能在同一个互斥锁上具有多个读锁,因为它正在调用本身锁定数据的函数(使用 a ReadLock
)。但是,正如我所发现的,这会导致互锁:
- 线程 1 读取锁定数据 (Lock1)
- 线程 2 使用写锁 (LockW) 等待
- 线程 1 生成另一个读锁 (Lock2),而 Lock1 仍然存在
现在我得到一个锁,因为Lock2
正在等待LockW
退出,LockW
正在等待Lock1
,并且Lock1
因为Lock2
.
我不知道是否可以更改设计,使每个线程只执行一个ReadLock
. 我相信拥有一个让Writers 挨饿的系统会解决我的问题。如何处理我的案件有通用的方法吗?
c++ - 从线程执行成员方法时出现分段错误
我正在尝试学习 std::threads、std::mutex 和 std::unique_lock。这个想法是创建5个线程。
请求将被写入队列,5 个线程将从队列中提取请求并处理它。
如果队列为空,线程将等待,这将一直持续到用户键入“完成”。
该代码进行了干净的编译。
当我执行它时,它会在创建线程时导致分段错误。
无法从调试器中弄清楚我做错了什么。请帮忙。
这是完整的代码
c++ - 对 unique_lock 和 scoped_lock 使用相同的互斥锁
使用具有相同互斥锁的 unique_lock 和 scoped_lock 是否合适?允许使用 cv.wait 和可选解锁,同时还提供范围绑定的安全性。
例如;