mutex 相关问题

互斥(“互斥”)是一种在多个线程同时访问(特别是更改)相同数据或资源时确保完整性的机制。

为什么我们需要一个单独的<shared_mutex>头文件?

我们可以将shared_mutex放在同一个头文件下,而不是单独的头文件吗? 当我使用shared_mutex时,我想我只需要#include 。原来我需要...

回答 1 投票 0

在主线程中锁定std::mutex然后在子线程中解锁是否合法?

在主线程中锁定 std::mutex 然后在子线程中解锁是否合法。 这是一个演示片段,看起来可行。 #包括 #包括 #包括 在主线程中锁定 std::mutex 然后在子线程中解锁是否合法。 这是一个演示snippet,它似乎有效。 #include <iostream> #include <mutex> #include <thread> int main() { std::mutex mtx; mtx.lock(); std::thread([&](){mtx.unlock();}).join(); std::thread([&](){mtx.lock();}).join(); } 这是我最常用的模式之一,让线程相互等待,不需要传递锁。 #include <mutex> #include <condition_variable> #include <iostream> int main() { std::mutex mtx; // despite its name a condition variable is more of an interthread signal // signalling something has changed that is worth checking std::condition_variable cv; bool thread1_finished{ false }; std::thread thread1{ [&] { std::cout << "thread 1 doing stuff\n"; std::scoped_lock lock{mtx}; thread1_finished = true; cv.notify_all(); }}; std::thread thread2{ [&] { // wait for thread 1 to finish { std::unique_lock lock{mtx}; // this is not a busy wait. // thread will go to sleep until cv is signalled // and then it will check the predicate cv.wait(lock, [&] { return thread1_finished; }); } std::cout << "thread 2 doing stuff\n"; }}; thread1.join(); thread2.join(); return 1; }

回答 1 投票 0

如何在代码中锁定多个临界区?

我正在学习 C# 中的多线程,发现 Mutex 类可以帮助我同步线程工作。所以,我想使用ThreadPool(限制为10个线程)并且这个线程的...

回答 1 投票 0

使用shared_mutex导致内存泄漏

以下代码会导致内存使用量增加: #包括 类 foo { 民众: 空栏() { std::unique_lock 锁(m_mtx); } std::shared_mutex m_m...

回答 1 投票 0

是否有可能在init工作完成之前执行`g_count++`?

是否有可能在init工作完成之前执行g_count++? (我的意思是,也许编译器或CPU会改变它们的执行顺序) #包括 #包括 #在...

回答 1 投票 0

与 pthread 和互斥锁冲突

我正在尝试执行以下作业: 您将编写一个创建三个线程的程序。这些线程一次访问一个共享整数、缓冲区。缓冲区最初将设置为 0....

回答 1 投票 0

如何将线程的这种特殊情况与 C++ std::thread 同步

我需要一些帮助来解决以下情况:我有一个主程序,它启动同一函数的多个实例作为线程。被调用的函数至少分为两部分。首先,每个

回答 1 投票 0

传递锁所有权

在某些地方,人们会询问如何在一个线程中锁定互斥体并在其他线程中解锁。当然,那些人会受到很多“不要这样做”、“它......

回答 1 投票 0

锁定单个生产者、多个消费者 fifo 队列的问题

我有一个简单的小队列,其中一个任务从文件读取到队列中,然后几个任务解压缩内容。我工作了一段时间,但最终崩溃了,因为即使队列是空的......

回答 1 投票 0

如何在递归函数中设置mutex和sync.waitgroup?

我在 Go 中编写了一些代码来解析站点并检索所有链接及其 Http 响应。我的代码运行良好,但我想添加 GoRoutines 以查看它在递归函数中的工作原理。 包裹我...

回答 1 投票 0

有时我的二进制信号量没有等待正确的时间

有时等待的时间不够长。我可能错过了一些简单的东西 - 但我找不到它。为什么等待函数有时会过早返回 #定义SEMAPHORE_MAXWAIT -1 #定义

回答 1 投票 0

有时我的二进制信号量无法等待正确的时间

有时等待的时间不够长。我可能错过了一些简单的东西 - 但我找不到它。为什么等待函数有时会过早返回 #定义SEMAPHORE_MAXWAIT -1 #定义

回答 1 投票 0

为什么当我调用lock()时std::mutex会抛出异常?

如果我创建一个简单的程序,例如...... #包括 std::互斥体 gMutex; int main() { gMutex.lock(); gMutex.unlock(); 返回0; } ...代码执行没有问题。 然而...

回答 2 投票 0

如何仅使用 pthread 互斥体来同步多个线程?

我试图创建三个线程,每个线程打开一个不同的输入文件,从中读取单个字符并将其设置为全局变量,然后等待下一个线程读取单个字符...

回答 1 投票 0

使用条件变量的正确方法是什么?

我的作业提供了运行时使用大量 CPU 的代码。目标是通过在生产者消费者问题中实施条件变量来减少该数量。 我

回答 1 投票 0

.Net Framework 4.7.2 的安全读/写锁定机制

在我们的 .Net Framework 4.7.2 Web 应用程序中,我们需要允许多个线程同时读取文件,但前提是当前未写入文件,并且当文件正在写入时

回答 1 投票 0

以2种方法同步2个互斥体

我有两种方法 TIC 和 TAC,它们只输出“TIC”或“TAC”。我的目标是创建 TIC 和 TAC 的多个线程之后。结果会依次输出:TIC, TAC...

回答 1 投票 0

哪些条件变量可以做而unlock+yield不能做?

在 POSIX 中,要求当对条件变量和互斥体调用等待时,两个操作 - 解锁互斥体和阻塞线程,以原子方式执行,这样...

回答 1 投票 0

允许远程桌面用户访问全局 Windows 互斥体

我的环境: 安装有远程桌面服务的 Windows Server 2012 R2。 用C编程 问题: 用户 U1 通过 RDP 连接到 Windows Server 并创建全局互斥体 (创造...

回答 1 投票 0

使用互斥锁保护的对象

我想实现一个惰性静态reqwest::ClientBuilder。注意,这是针对实用程序模块的,因此我有一种感觉,在这种情况下很难避免使用静态。我想构建一次,...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.