mutex 相关问题

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


C,使用带有静音和条件变量的2个线程打印A0B1A2B3A4B5A6B7A8B9

因此,我有一个实验室问题,其中我需要使用带有Mutex和Cond var的2个线程来打印标题模式。该模式存储在一系列的炭中,并且有一个全球跟踪我...

回答 1 投票 0

使用PTHREAD_DETACH

void *philo_life(void *phi) { t_philo *philo; pthread_t t; philo = (t_philo *)phi; if (philo->n % 2 == 0) ft_usleep(philo->info->t_eat / 10); while (!is_dead(philo, 0)) { pthread_create(&t, NULL, check_death, phi); take_fork(philo); philo_eat(philo); pthread_detach(t); if (philo->m_count == philo->info->n_eat) { pthread_mutex_lock(&philo->info->m_stop); if (++philo->info->philo_eat == philo->info->n_philo) { pthread_mutex_unlock(&philo->info->m_stop); is_dead(philo, 2); } pthread_mutex_unlock(&philo->info->m_stop); return (NULL); } } return (NULL); } int is_dead(t_philo *philo, int nb) { pthread_mutex_lock(&philo->info->dead); if (nb) philo->info->stop = 1; if (philo->info->stop) { pthread_mutex_unlock(&philo->info->dead); return (1); } pthread_mutex_unlock(&philo->info->dead); return (0); } void *check_death(void *phi) { t_philo *philo; philo = (t_philo *)phi; ft_usleep(philo->info->t_die + 1); pthread_mutex_lock(&philo->info->m_eat); pthread_mutex_lock(&philo->info->m_stop); if (!is_dead(philo, 0) && timestamp() - \ philo->last_eat >= (long)(philo->info->t_die)) { pthread_mutex_unlock(&philo->info->m_eat); pthread_mutex_unlock(&philo->info->m_stop); print(philo, " died\n"); is_dead(philo, 1); } pthread_mutex_unlock(&philo->info->m_eat); pthread_mutex_unlock(&philo->info->m_stop); return (NULL); }

回答 1 投票 0

可以在信号处理程序中可以旋转锁会导致死锁?

我已经读到,如果主程序的线程在调用信号处理程序之前已锁定了Mutex,则在信号处理程序中使用MUTEX会造成死锁。 我还读了信号

回答 1 投票 0



Mutex按需释放 我正在创建一个由WebSocketReader组成的程序,该程序从WebSocket读取数据(基本上运行一个循环以读取新传入的数据)和ConfigurationFetcher,需要

是否有更多有效的方法来执行此操作?我有点像某种东西,可以将锁定为“不确定”,直到别人需要借用它为止。

回答 0 投票 0


为什么我不能分配std :: std的可选:: lock_guard?

为什么我不能声明可选的std::lock_guard然后稍后分配?可选字符串的同一件事正常工作。 this this Works: std::mutex m; std::optional<std::lock_guard<std::mutex>> lg(m); 但这不是:(*)std::mutex m; std::optional<std::lock_guard<std::mutex>> lg; lg = std::lock_guard<std::mutex>(m); 这不是:(**)std::mutex m; std::optional<std::lock_guard<std::mutex>> lg; lg = std::optional<std::lock_guard<std::mutex>>(m); 但这确实:std::string s; std::optional<std::string> os; os = std::string(s); 这样做:std::string s; std::optional<std::string> os; os = std::optional<std::string>(s); (*)错误消息:1>c:\dev\repos\tp_iu2\iu2\pretests\j00010_adaptercal.cpp(51): error C2679: binary '=': no operator found which takes a right-hand operand of type 'std::lock_guard<std::mutex>' (or there is no acceptable conversion) 1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.13.26128\include\optional(547): note: could be 'std::optional<std::lock_guard<std::mutex>> &std::optional<std::lock_guard<std::mutex>>::operator =(const std::optional<std::lock_guard<std::mutex>> &)' 1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.13.26128\include\optional(320): note: or 'std::optional<std::lock_guard<std::mutex>> &std::optional<std::lock_guard<std::mutex>>::operator =(std::nullopt_t) noexcept' 1>c:\dev\repos\tp_iu2\iu2\pretests\j00010_adaptercal.cpp(51): note: while trying to match the argument list '(std::optional<std::lock_guard<std::mutex>>, std::lock_guard<std::mutex>)' (**)错误消息:1>c:\dev\repos\tp_iu2\iu2\pretests\j00010_adaptercal.cpp(51): error C2280: 'std::optional<std::lock_guard<std::mutex>> &std::optional<std::lock_guard<std::mutex>>::operator =(const std::optional<std::lock_guard<std::mutex>> &)': attempting to reference a deleted function 1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.13.26128\include\optional(547): note: compiler has generated 'std::optional<std::lock_guard<std::mutex>>::operator =' here 1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.13.26128\include\optional(547): note: 'std::optional<std::lock_guard<std::mutex>> &std::optional<std::lock_guard<std::mutex>>::operator =(const std::optional<std::lock_guard<std::mutex>> &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'std::_Deleted_move_assign<_Base,_Ty> &std::_Deleted_move_assign<_Base,_Ty>::operator =(const std::_Deleted_move_assign<_Base,_Ty> &)' 解决方案是使用std::unique_ptr<std::lock_guard<std::mutex>>,所以我只是出于好奇而问。 std::optional<std::lock_guard<std::mutex>>无法复制可分配,因为std::lock_guard<std::mutex>不能复制可分配。这是设计。 std::lock_guard并不是要复制或分配。它的唯一目的是提供RAII包装纸。如果您不需要RAII包装器,那么std::lock_guard是错误的包装器。您可以围绕该方法进行操作,也可以使用可以默认构建的类型而无需构建的std::mutex,然后分配以锁定mutex:#include <mutex> int main() { std::mutex mut; std::unique_lock<std::mutex> lg; // ... later lg = std::unique_lock<std::mutex>{mut}; }

回答 1 投票 0

为什么在尝试创建已经存在的元素时保护全球独特的实例僵局的静音?

这个程序挂起,我怀疑它不会像预定的那样释放Mutex锁。我在这里必须做错了什么,但是我不能把我的手指放在上面。 使用STD :: Any :: TypeID; 使用STD ::

回答 1 投票 0


通过futex实现锁定

我读了奥斯特的书。我停在关于线程锁的章节上。通过 futex 实现互斥: 无效 mutex_lock(int *mutex) { 整数v; if (atomic_bit_test_set(互斥体, 31) == 0) ...

回答 1 投票 0

创建互斥体和等待它一样吗?

我需要一个全局互斥锁来确保我的应用程序一次只能运行一个实例。 我在SO上找到了以下代码: 使用 var mutex = MutexAcl.Create(true, mutexId, out bool mutexCreated,

回答 1 投票 0

新 MutexAccessRule 上的 System.ArgumentNullException

我有一个“单一应用程序实例”检测功能,使用“经典”互斥量方法: var Identity = new SecurityIdentifier(WellKnownSidType.WorldSid, null); 变种

回答 1 投票 0

C 中的互斥体/锁:C11 `mtx_lock()` 与 `pthread_mutex_lock()`

互斥锁直到 C11 才被引入到 C 标准中,对吧?既然它们已经存在,那么人们应该使用哪一个或更喜欢哪一个,以及何时使用?为什么?有什么区别? C11 的 mtx_lock() 与 pthread_mutex_lock(...

回答 1 投票 0

(c++线程和condition_variable)这个程序永远不会结束吗?

我想下面的源代码可能不会永远结束。 假设所有等待线程都已进入等待状态。 之后,唤醒程序调用notify_all() 一个线程 t1 醒来并执行某些操作。还有哦...

回答 1 投票 0

Perl Mutex 似乎不起作用

我有以下 perl 互斥体代码: # 声明互斥体 # # 成功时返回互斥锁,失败时返回 undef # # 如果互斥量超出其范围,则该互斥量将被释放 # 子 ClaimMutex { 我的($mutexNam...

回答 2 投票 0

匹配锁处理长期任务引起的死锁

我对运行以下代码的结果感到困惑。我可以理解该行为的逻辑,但对我来说似乎有点不合理(因为我认为这使变量生命周期变得混乱......

回答 1 投票 0

何时在 std::shared_lock 上使用 defer_lock?

我从cppreference看到: std::shared_lock::shared_lock C++ 线程支持库 std::shared_lock 共享锁() noexcept; (1)(自 C++14 起) 共享锁(共享锁&&其他)

回答 2 投票 0

让父线程在初始化子线程后等待直到收到来自子线程的信号的最佳方法是什么?

在使用 pthread_create 生成线程后,我希望父线程等待任意时间,直到子线程允许其继续。这是我可能会采取的方法......

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.