草庐IT

synchronization

全部标签

c++ - 监控 C++11 和 C++03 中的类实现?

HerbSutter在“C++andBeyond2012:HerbSutter-C++Concurrency”中描述了模板Monitor类的实现:templateclassmonitor{private:mutableTt;mutablestd::mutexm;public:monitor(Tt_):t(t_){}templateautooperator()(Ff)const->decltype(f(t)){std::lock_guardhold{m};returnf(t);}};我正在尝试包装我现有的类Logger:Loggerlogger;monitorsynchronizedLo

C# 和 C++ 进程间同步

我们有2个应用程序。一个用C#编写,另一个用C++编写。我们需要维护一个在这些进程之间共享的计数器(在内存中)。每次这些应用程序之一启动时,它都需要检查该计数器并增加它,而每次应用程序关闭时它都需要减少计数器。如果应用程序崩溃或使用任务管理器关闭,我们还需要减少计数器。我们想到了使用操作系统同步对象之一,例如MUTEX。我的问题:什么样的同步对象最适合跨进程(当一个是C#而另一个是C++时)希望我的问题很清楚。非常感谢,阿迪巴尔达 最佳答案 您可能会使用命名信号量。信号量基本上是一个计数,它允许开发人员限制正在访问某些资源的线程/进

c++ - 使用 InterlockedCompareExchange 无锁

我正在尝试使用互锁操作使以下代码片段无锁,知道如何翻译吗?if(m_Ref==0xFFFF)m_Ref=1;else{if(++m_Ref==1)CallSomething();//}我在想类似的东西if(InterlockedCompareExchange(&m_Ref,1,0xFFFF)!=0xFFFF)){if(InterlockedIncrement(&m_Ref)==1)CallSomething();}这里面有什么问题/竞争吗? 最佳答案 从表面上看这看起来是正确的,但每次您连续使用两个互锁操作时,您都会将自己暴露在AB

c++ - 从 Qt 中的多个线程绘制

我正在用Qt编写一个程序,它运行10个工作线程来计算物体在空间中的轨迹。他们还必须绘制对象的路径。我有一个派生QGraphicsEllipseItem的“Body”类,它里面有一个QPainterPath。“模拟”类采用世界上的障碍物列表,模拟并运行body,直到body与某物发生碰撞。模拟在单独的线程中运行(通过moveToThread完成,而不是通过继承QThread)。当body发生碰撞时,模拟会发出一个信号,表明它已完成。当所有线程都完成后,我想绘制路径(我通过调用“Body”中的一个方法来实现,该方法在其draw方法中启用路径绘制)。不幸的是,我收到ASSERT错误:ASSE

深入浅出Java多线程(九):synchronized与锁

引言大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第九篇内容:synchronized与锁。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!在现代软件开发中,多线程技术是提升系统性能和并发能力的关键手段之一。Java作为主流的编程语言,其内置的多线程机制为开发者提供了丰富的并发控制工具,其中synchronized关键字及其背后的锁机制扮演了至关重要的角色。理解并掌握synchronized的使用原理与特性,有助于我们设计出高效且线程安全的应用程序。Java中的每个对象都可以充当一把锁,这意味着任何实例方法或静态方法可以通过synchronized关键字来实

Java关键字之synchronized详解【Java多线程必备】

点击 Mr.绵羊的知识星球 解锁更多优质文章。目录一、介绍二、特性1.线程安全2.互斥访问3.可重入性4.内置锁三、实现原理四、和其他锁比较1.优点2.缺点五、注意事项和最佳实践六、使用案例1.案例一2.案例二一、介绍  synchronized是Java中最基本的同步机制之一,它通过在代码块或方法上添加synchronized关键字来实现线程的同步和互斥。使用synchronized可以确保多个线程在访问共享资源时不会发生冲突。二、特性1.线程安全  使用synchronized可以确保多个线程在访问共享资源时不会发生冲突。2.互斥访问  同一时刻只能有一个线程访问共享资源。3.可重入性  

c++ - std::future.get() 有时卡在 os x 中

我有两个线程,一个线程应该接收和处理来自另一个线程的请求。第二种是同步传输请求和接收响应。我尝试了以下方案:成对队列(值(value),promise)。第一个线程创建一个promise并将其插入同步队列并等待future.get()的返回值问题是有时线程卡在future.get()上,但是当我暂停程序执行并继续时它再次正常工作。这个stucks具有随机​​性。FutureQueue.h#ifndefFutureQueue_h#defineFutureQueue_h#include#include#include#include#includetemplateclassWork{pub

c# - OpenEvent/OpenFileMapping 失败并显示 ERROR_ACCESS_DENIED

我正在开发一个开源.NET程序集(WinSCP.NETassembly),它生成一个native(C++)应用程序并通过事件和文件映射对象与其通信。程序集使用Process类生成应用程序,没有特殊设置。程序集创建一些事件(使用EventWaitHandle)和文件映射(使用PInvokedCreateFileMapping),应用程序使用OpenEvent“打开”这些和OpenFileMapping。在大多数情况下它工作正常。但现在我有一个用户在WindowsServer2008R264位上使用来自ASPX应用程序的程序集。在他的例子中,OpenEvent和OpenFileMappin

c++ - 为什么在 C++0x 或 Boost.Thread 中没有针对多个互斥锁的作用域锁?

C++0x线程库或Boost.thread定义非成员变量模板函数,锁定所有锁避免死锁。templatevoidlock(L1&,L2&,L3&...);虽然此功能有助于避免死锁,但标准不包括用于编写异常安全代码的关联作用域锁。{std::lock(l1,l2);//dosomething//unlocklil2exceptionsafe}这意味着我们需要使用其他机制作为try-catchblock来制作异常安全的代码,或者我们自己在多个互斥锁上定义我们自己的作用域锁,甚至这样做{std::lock(l1,l2);std::unique_locklk1(l1,std::adopted);

c++ - 如何实现递归 MRSW 锁?

我的项目需要一个完全递归的多读/单写锁(共享互斥锁)——我不同意这样的观点,即如果你有完全的常量正确性,你就不需要它们(有在boost邮件列表上对此进行了一些讨论),在我的例子中,锁应该保护一个完全透明的缓存,该缓存在任何情况下都是可变的。关于递归MRSW锁的语义,我认为唯一有意义的是除了共享锁之外还获取排他锁会暂时释放共享锁,当释放独占锁时重新获取。有点奇怪的是,解锁可以等待,但我可以接受-写入很少发生,递归锁定通常只通过递归代码路径发生,在这种情况下,调用者必须准备好调用可能在任何时间等待案件。为避免这种情况,仍然可以简单地升级锁而不是使用递归锁定。在独占锁之上获取共享锁显然只会增