mutex 相关问题

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

并行改变动态大小的向量

我正在尝试并行改变动态大小(即在某些条件下,推送新值,并在每次迭代中调用 pop())Vec。 我在这项工作中做错了什么吗...

回答 1 投票 0

嵌入式 C 在将全局变量复制到临界区的堆栈变量时避免优化

我正在研究我们的软件组件中的 RTOS 支持。 在某些情况下,将全局变量的副本创建到关键部分中的局部变量中是有意义的(例如受

回答 1 投票 0

C++ 中可能出现的线程饥饿问题

我有一个解码函数,可以解码字符串并在内部使用映射来存储已解码的值以提高效率。该函数由多个线程访问(使用pthread),因此要防止

回答 1 投票 0

boost::mutex / 如何测试互斥锁是否被锁定

我知道,我知道,我的消息标题可能看起来具有挑衅性,因为 boost::mutex 有目的地不公开锁定/解锁(以避免死锁)。 然而 boost 文档相当s...

回答 4 投票 0

Rust 函数返回互斥体中的值<Option<T>>

我的 rust 应用程序中有一堆函数,它们都获取一个 Mutex 作为参数,其中包含一个选项。我需要该互斥体,因为这些函数将在线程中执行,并且我需要选项,因为...

回答 1 投票 0

关于condition_variable的问题,为什么condition_variable与mutex配对

我最近一直在学习std::condition_variable,只是有一些问题我无法理解。 Cppreference 和许多其他教程给出了这样的示例: std::互斥体 m; 标准::

回答 1 投票 0

如何使用互斥体和条件优雅地退出线程

下面的演示使用互斥锁来保护共享变量sum,线程一等待线程二的信号对变量sum进行操作,线程三监视变量sum以销毁互斥锁。效果很好...

回答 1 投票 0

Python 单线程性能 vs 主线程性能

我正在尝试Python的多处理和线程模块,偶然发现了一些相当奇怪的东西。 看看下面的程序: 导入线程 导入时间 导入

回答 1 投票 0

C++11:为什么 std::condition_variable 使用 std::unique_lock?

在使用 std::condition_variable 时,我对 std::unique_lock 的作用有点困惑。据我理解的文档, std::unique_lock 基本上是一个臃肿的锁防护,带有...

回答 3 投票 0

这个函数可能会导致线程无限期等待吗?

我正在阅读flutter引擎中的代码 https://github.com/flutter/engine/blob/main/shell/common/platform_view.cc#L58 我想问如果latch.Signal()先于latch.Wait()到达,会不会...

回答 1 投票 0

C++ 中的多线程无法正常工作

我正在尝试运行两个线程。第一个将无限运行,另一个将在第一个上的互斥锁被清除时运行。 我不想改变代码的基本结构,比如,l...

回答 1 投票 0

寻求数据包处理中互斥锁和信号量等待的改进解决方案

我正在开发一个多线程网络应用程序,专注于涉及发送者和接收者线程的数据包处理。该应用程序在单核 CPU 上运行,这增加了运行方式的复杂性

回答 1 投票 0

在Python多处理中执行二进制信号量或互斥体以进行上下文切换操作

我正在尝试自动化win应用程序和java应用程序之间的同步关系。 我的标准是: 启动 win 和 jav 应用程序 在jav应用程序中执行命令 等待jav的回复

回答 1 投票 0

如何在不使用无锁机制的情况下实现最大吞吐量?关于线程安全循环队列

我对 enqueueTS() 和 dequeueTS() 使用两个互斥体,以便写入器和读取器线程可以同时运行,而无需互相等待。然而,enqueueTS() 和 dequeueTS() 都会影响成员

回答 1 投票 0

我应该如何在共享内存中初始化pthread互斥体,因为在程序启动时它们已经可以初始化了?

我正在使用共享的、强大的pthread互斥体来保护我的应用程序中的一些共享内存区域。由于我的程序是由 systemd 服务管理的,因此它可能会重新启动,其中......

回答 1 投票 0

如果Linux内核重新分配PID,在使用C pthread互斥体时会导致错误/UB吗?

如果我没猜错的话,Linux pthread C API 中是否可以使用强大的互斥锁,可以跨进程共享(通过将它们放在共享内存中),并且允许您获取...

回答 1 投票 0

缓存删除和刷新数据竞争

我开始学习缓存并想到了以下问题,并且确实只看到一种解决方法,但我确信我错过了一些东西 让我们想象一下我有两个端点,一个...

回答 1 投票 0

使用 arc mutex 处理线程的正确方法是什么?

我有一些网址,然后我将其分成块并同时迭代它们,使用克隆将结果保存在 vec 中: pub fn Collect_parm_list(url_list: Vec) -> 结果 我有一些 url,然后我将其分成块并同时迭代它们,使用克隆将结果保存在 vec 中: pub fn collect_parm_list(url_list: Vec<String>) -> Result<Vec<String>, Box<dyn std::error::Error>> { let shared_id_list = Arc::new(Mutex::new(vec![])); for chunk in url_list.chunks(20) { let mut handles = vec![]; for url in chunk { let id_list = Arc::clone(&shared_id_list); let handle = thread::spawn(move || { // total: optionSale -> result -> total let mut id_list_v = id_list.lock().unwrap(); id_list_v.push(url.to_string()) }); handles.push(handle); } // Wait for all threads to complete for handle in handles { handle.join().unwrap(); } } let x = shared_id_list.lock().unwrap(); Ok(x.to_vec()) } 我借用数据时出错: url_listdoes not live long enough borrowed value does not live long enough at:用于 url_list.chunks(20) { 中的块 你的问题是 .chunks() 不返回拥有的东西的迭代器,它返回一个切片。 在这种情况下,这意味着当您有一个 Vec<String> 时,.chunks() 会为您提供一个 &[String] 的迭代器,这意味着 url 是一个 &String。 然后,您尝试将其传递给传递给 thread::spawn 的闭包,但提供给该函数的闭包必须是 'static,这意味着它们不会从任何当地人那里借用。 请注意,即使您连接了所有线程句柄,这也是有问题的。 但借用检查员并不知道会发生这种情况。 一个简单的修复方法是在生成线程之前添加 let url = url.to_owned();,这将创建 url 的独立副本,然后闭包将捕获它。 或者,您可以使用作用域线程。 这可以让您避免复制 url,但它 也 可以让您从输出列表中消除 Arc 层。 (您仍然需要 Mutex 来同步访问。)这还允许您在线程完成时在 .into_inner() 上使用 Mutex,因为您知道此时没有线程仍然具有访问权限,因此您可以在不使用它的情况下使用它。等待锁定。 这种方法的代码最终也变得简单得多: pub fn collect_parm_list(url_list: Vec<String>) -> Vec<String> { let id_list = Mutex::new(vec![]); thread::scope(|s| { for chunk in url_list.chunks(20) { for url in chunk { s.spawn(|| { // total: optionSale -> result -> total let mut id_list_v = id_list.lock().unwrap(); id_list_v.push(url.to_string()) }); } } }); id_list.into_inner().unwrap() }

回答 1 投票 0

基于锁的并发向量

考虑基于 std::vector 的基于锁的并发向量,并为 std::vector 公共成员函数的每次调用锁定互斥锁,如何通过并发安全地迭代线程

回答 1 投票 0

C++中unique_lock和shared_lock有什么区别

尝试了解何时可以使用shared_lock而不是unique_lock,反之亦然。 C++ 文档非常神秘!我知道一般准则是如果我们愿意的话,在两者上使用 lock_guard

回答 1 投票 0

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