mutex相关内容
根据 http://en.wikipedia.org/wiki/Producer-consumer_problem我想使用信号量来模拟P/C问题.我陷入僵局,不知道是什么问题. public static void main(String[] args) { CustomBlockingQueue blockingQueue = new CustomBlockingQueue
..
我需要有关进程间通信的帮助. 我有一个应用程序A和一个应用程序B. 应用程序B的目的是更新应用程序A.由于应用程序A无法自我更新,因此必须更新某些dll,这就是使用应用程序B的原因. Appication A启动App B,App B关闭App A并开始更新A. 更新程序过程分为两步 1)复制msi位 2)安装钻头 如果用户在等待应用程序A的同时第一步取消了应用程序B,那么由于取消了更
..
我们已经开发了一些长期运行的C#控制台应用程序,这些应用程序将由Windows Scheduled任务运行. 这些应用程序可能在Intranet/Extranet上的许多不同服务器计算机上运行. 我们无法确保它们在一台计算机上运行,因为每个应用程序可能需要访问某些资源,这些资源仅在特定计算机上可用. 仍然,所有这些应用程序都使用通用的WCF服务来访问数据库. 我们需要确保在任
..
我正在wxListCtrl中获取数据库表值((数据可能很大,所以我正在使用wxThread)子线程将行发送到Main线程,并且主线程将其填充到wxListCtrl中, 一切都很好,但是当我尝试关闭框架时,这给了我意外的结果.在关闭按钮上,我正在调用一个新框架,有时它打开,而有时没有,我的代码是:- if(thread_object_holder->IsAlive()) {
..
https://en.cppreference.com/w/cpp/thread/lock_tag void transfer(bank_account &from, bank_account &to, int amount) { // lock both mutexes without deadlock std::lock(from.m, to.m); // mak
..
我有一个使用过stm32f746g发现板的项目.它顺序地从Uart接收具有固定大小的数据,并通知应用程序每个接收到的数据已完成,并使用dma回调(HAL_UART_RxCpltCallback函数).它在一开始就可以正常工作,但是在运行了几分钟后,dma回调停止被调用,结果,指定的参数值没有得到更新.因为该参数也在另一个线程中使用(实际上是rtos定义的计时器),所以我认为此问题是由于缺乏线程安全
..
我正在尝试使用多个线程(pthread)对文件进行随机写入(基准测试).如果我注释掉mutex lock,看起来好像创建的文件大小小于实际大小,好像有些写入丢失了(总是块大小的某些倍数).但是,如果我保留互斥锁,则大小总是精确的. 我的代码是否在其他地方有问题,并且互斥量并不是真正必需的(如@evan所建议)或这里需要互斥锁 void *DiskWorker(void *threada
..
我正在寻找正确的解决方案来保护线程组,就像通常使用单个线程那样,即:线程1和2之一或两者都可以同时锁定互斥锁M,而1和2都不放在睡觉.互斥锁M抵靠线程3.因此,如果线程3在互斥锁被线程1或2或两者同时锁定时锁定了互斥锁,则线程3进入休眠状态.如果线程1或2在被线程3锁定时锁定了互斥锁,则1或2(以锁定状态为准)也将进入睡眠状态,直到3释放它为止. 谢谢. 解决方案 如果您的意思是在一
..
我在32核计算机上运行以下程序: #include #include #include using namespace std; boost::thread_group g; boost::mutex _mtx; class A{ public: void foo() {
..
boost::details::pool::pthread_mutex和boost::details::pool::null_mutex有什么区别. 我看到在最新的boost版本-1.42中,类boost::details::pool::pthread_mutex被删除了.我应该怎么用呢? 解决方案 boost::details::pool::null_mutex是不执行任何操作的互
..
我使用的特征不是围绕多线程(草书)设计的. 现在,当它使用多线程时,它将位于互斥锁之后,因此它将无法同时在两个线程中使用. 什么是铁锈试图保护我免受伤害,我能对此采取任何措施吗? 作为示例参考,我的示例代码为: extern crate cursive; use cursive::Cursive; use std::thread; use std::sync::{Mute
..
我想必须让线程(消费者)对另一个线程(生产者)制造东西表示兴趣.但并非一直如此. 基本上,我想一次性消费.理想情况下,生产者会很高兴地从事其业务,直到一个(或多个)消费者发出他们想要的东西的信号,在这种情况下,生产者会将一些数据推送到变量中并表示已经这样做了.使用者将等待直到变量变满为止. 还必须如此,以便一次性使用的消费者可以确定它已经等待了太长时间而放弃了等待(la pthread
..
以下是解决“牛奶过多问题"的简单方法 lock mutex; while (1){ lock_acquire(mutex); if (no milk) go and buy milk;//action-1 lock_release(mutex); } 问题在于,action-1可能要花
..
我定义了一个以std::mutex my_mutex作为其私有成员变量的类.但是,当我尝试在不同线程调用的成员函数中使用lock_guard来使用它时,编译器会抛出很多错误.如果我将此互斥锁保留在课堂之外,那么它将起作用.代码如下 class ThreadClass { std::mutex my_mutex; public: void addToList(int max
..
在生产者-消费者问题中,为什么我们经常建议使用信号量而不是使用锁/互斥锁? 我看不到使用信号量的正当理由,因为我们只有 2个线程进行协调.在这种情况下,锁似乎更容易编写代码并进行推理,因为一个线程将锁定缓冲区然后释放它,以便另一个线程可以执行相同的操作.只有2个线程,所以我看不到信令的使用. 有人可以说为什么建议通常将信号量用于生产者-消费者吗? 解决方案 据我所知. 请
..
阅读一些MPI规范后,我会理解,在使用MPI_THREAD_SERIALIZED进行初始化时,程序必须确保在单独线程中发生的MPI_Send/Recv调用一定不能重叠.换句话说,您需要一个互斥体来保护MPI调用. 考虑这种情况: Mutex mpi_lock = MUTEX_INITIALIZER; void thread1_function(){ while(true){
..
是否可以通过这种方式初始化互斥锁: pthread_mutex_t mutex = {0}; 以下3种互斥锁初始化之间有什么区别? 1) pthread_mutex_init(&mutex, NULL); 2) pthread_mutex_t mutex = {0}; 3) pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
..
我知道 volatile在C ++中的工作方式.但是,对于为什么我们需要波动,我仍然感到困惑.我认为的唯一原因是我们需要侦听变量是否已更改,如下代码所示: volatile int some_int = 100; while(some_int==100) { doSomething() } 程序员需要知道单词 some_int 是否已更改,因此他使用"volatile".我可以
..
可能重复: C ++:对静态类成员的未定义引用 Logger.h: class Logger { private: Logger(); static void log(const string& tag, const string& msg, int level); static Mutex mutex; public: static void
..
我有两个程序通过共享内存段进行交互.当使用该段进行读取或写入时,它们持有一个锁. 如果他们中的任何一个在关键部分崩溃(通常会被杀死-可能有不可捕获的东西),我希望他们释放锁定,以使shmem不会被完全锁定. 其他问题为Windows,Java等提供了答案,但是如何在Unix(特别是Linux)中实现呢? (我没有附加到pthreads互斥函数; SysV信号量或其他任何方法都可以
..