mutex 相关问题

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

使用 std::shared_ptr 来管理 std::mutex 生命周期和锁定/解锁 - 这是一个好的做法吗?

我编写了一个 Lock 类,它使用 std::shared_ptr 来处理 std::mutex 对象的生命周期,包括锁定/解锁操作。我知道 std::lock_guard 和 std::unique_lock 更协调...

回答 0 投票 0

为了从 Golang 的切片中删除元素,我应该把 `mutex` 放在哪里?父结构还是子结构?

假设我有两个结构,如下所示: 类型设备结构体{ 端口 []*TCPPort } 类型 TCPPort 结构体 { ID 整数 状态布尔值 设备 *设备 } 当创建 TCP 端口时,它会附加...

回答 1 投票 0

sync:在之前的Wait返回之前重用WaitGroup

该代码在多个goroutine中并发运行,以下代码是从生产环境代码中提取的关键相关部分: 函数检查() { ......检查状况...... //

回答 1 投票 0

更新控制台中打印的文本

我正在 ts 中创建一个 CLI 程序,我的命令将进度写入控制台。我想通过避免编写如下几行来使其更漂亮: 启动微服务api-

回答 0 投票 0

在线程中调用 pthread_cond_wait 是否解锁互斥量

手册页说这个 pthread_cond_wait 以原子方式解锁互斥量(根据 pthread_unlock_mutex)并等待条件变量 cond 发出信号。 但是线程 start_function 可能是...

回答 2 投票 0

Go Programming Language book example server2 有错吗?

我正在阅读 The Go programming Language Book。在第 1 章中,服务器 2 示例:书中的代码使用互斥锁来防止竞争条件。但是我复制了代码并尝试运行它并且我......

回答 1 投票 0

与 CUDA 共享内存互斥 - 添加到项目列表

我的问题如下:我有一张图像,其中我使用 GPU 检测了一些兴趣点。检测在处理方面是一个重量级的测试,但是只有大约25分之一的p ...

回答 2 投票 0

未解析的外部符号“私有:静态类变量”c ++ [重复]

我在使用静态方法和锁在 C++ 中创建容器时遇到错误。我不是 C++ 专家。有人能帮忙找到真正的问题吗?下面是代码。我正在使用 v14 -

回答 1 投票 0

C中的竞争条件

我有以下程序(缩写)来计算每个字母在使用线程的文件中出现的次数: #define N_LETTERS 26U #define IS_LETTER(x) (x >= 'A' && x <= 'Z') #

回答 2 投票 0

std mutex 以某种方式允许两个线程执行

我正在调试一个类函数。我认为问题可能是两个线程之间的竞争条件,所以我添加了一个互斥体以确保调试时的独占访问。 我正在记录线程 ID 和 wh...

回答 0 投票 0

如何使用 POSIX 线程声明递归互斥体?

我对如何使用 pthread 声明递归互斥锁有点困惑。 我尝试做的是一次只有一个线程能够运行一段代码(包括函数)但是在怀疑之后我

回答 4 投票 0

什么时候需要 pthread_mutex_destroy?

想问一下pthread_mutex_t的正确用法。 我知道您可以使用 pthread_mutex_init 函数进行初始化,也可以将其设置为 PTHREAD_MUTEX_INITIALIZER 并且

回答 0 投票 0

互斥解锁会隐式通知其他线程吗?

想象一下,我们有一个条件变量 cv_ 与互斥量 mtx_ 相关联 线程 t1 现在有一个与 mtx_ 关联的 unique_lock ul 并且它现在有 cv_,而其他线程是 cv_.wait(unique_lock(mtx_)...

回答 0 投票 0

C 多线程 | for 循环中的线程创建使用上次迭代的参数

我是多线程的新手,一般来说不是 C 语言中最好的,所以对我来说很简单。 我有一个 for 循环,它创建了许多线程,我将参数传递给这些线程: 对于(int i = 0; i <

回答 2 投票 0

如何在 C++ 代码中运行多线程

我是c++的初学者。我编写了一个程序来从一个数据库中提取数据并将这些数据存储到另一个数据库中。我只想添加多个线程来加快进程。我希望通过两种方式做到这一点。

回答 3 投票 0

如何在 golang 中使函数线程安全

如何在golang中锁定一个函数或函数体不被两个线程调用? 我的用例是我有一个网络服务器正在调用一个串行接口,它只能有一个调用...

回答 4 投票 0

我是 pthreads 的新手并将它们与互斥锁一起使用。谁能指出我如何使用它们的正确方向?

我有一个使用 pthreads 和 mutex 的编程作业。该程序的重点是接收输入(.txt 文件),输入如下所示: 桥接数字1 数字2 CarOrBoat CoB_name ...

回答 0 投票 0

std::lock_guard<std::mutex> 和 if constexpr 块的问题

有一个类模板Foo。对于某些特定类型,函数应该使用 lock_guard。 这是示例代码: #包括 #包括 #包括 有一个类模板Foo<T>。对于某些特定类型,函数应该使用lock_guard。 这是示例代码: #include <type_traits> #include <mutex> #include <vector> template<typename T> class Foo { public: void do_something(int k) { if constexpr(std::is_same_v<T, NeedMutexType>) { std::lock_guard<std::mutex> lock(mtx_); } resource_.push_back(k); // code for task with resource_ ... } private: std::mutex mtx_; std::vector<int> resource_; }; std::lock_guard 将在 if constexpr 范围的末尾被破坏。 (如有不妥,请指正。) 为了处理这个问题,我可以将下面带有 resource_ 的任务代码复制到 if constexpr 范围内,或者只使用原始的 std::mutex,例如 mtx_.lock() & mtx_.unlock() 代替。 有什么方法可以用std::lock_guard处理这个问题吗?谢谢。 也许 std::conditional 可以来拯救这里,如果你需要经常做这种事情。 template<class Mutex> struct FakeLockGuard { FakeLockGuard(Mutex&){} }; template<typename T, class Mutex = std::mutex> using OptionalLock = typename std::conditional< std::is_same_v<T, NeedMutexType>, std::lock_guard<Mutex>, FakeLockGuard<Mutex>>::type; 这里我们定义了一个什么都不做的类模板,其构造方式与std::lock_guard相同。然后,我们将其与 std::conditional 结合使用,根据类型检查的结果选择 std::lock_guard 或 FakeLockGuard。 现在您可以按如下方式使用它: template<typename T> class Foo { public: void do_something(int k) { OptionalLock<T> lock(mtx_); resource_.push_back(k); // ... } private: std::mutex mtx_; std::vector<int> resource_; }; 您可以通过在 FakeLockGuard 构造函数中设置断点或使其输出一些内容来轻松验证它是否有效。 这就是你如何让它在编译时工作。但是我认为正如您已经提到的那样,您可以简单地构造一个unique_lock然后有条件地锁定它。这样做的好处是对于必须使用您的代码的任何人来说都更加清晰。最后,就看你觉得哪个最合适了。 只需在解锁状态下构建锁,然后再锁定: template<typename T> class Foo { public: void do_something(int k) { std::unique_lock<std::mutex> lock(mutex_, std::defer_lock); if constexpr(std::is_same_v<T, NeedMutexType>) { lock.lock(); } resource_.push_back(k); // code for task with resource_ ... } private: std::mutex mtx_; std::vector<int> resource_; } 请注意,您需要为此使用std::unique_lock,因为std::lock_guard无法解锁

回答 2 投票 0

C++ 线程同步互斥锁

我是并行编程的新手,我正在尝试分解多线程上的迭代矩阵计算:每次迭代由两个顺序作业 A 和 B 组成;它需要等待所有...

回答 2 投票 0

Rust:不能将 `Arc` 中的数据借用为可变的,但内部数据通过 Mutex 保护

在学习 Rust 并尝试完成一个示例时,其中需要跨线程和函数共享数据库 Db。 链接到最小示例 我已经包装了数据库(一个结构...

回答 1 投票 0

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