草庐IT

c++ - 多读/单写类的线程安全

我正在研究一个经常阅读但很少写的集合。classA{boost::shared_ptr>_mySet;public:voidadd(intv){boost::shared_ptr>tmpSet(newstd::set(*_mySet));tmpSet->insert(v);//inserttotmpSet_mySet=tmpSet;//swap_mySet}voidcheck(intv){boost::shared_ptr>theSet=_mySet;if(theSet->find(v)!=theSet->end()){//dosomethingirrelevant}}};在类中,ad

v81.01 鸿蒙内核源码分析(读写锁篇) | 内核如何实现多读单写 | 百篇博客分析OpenHarmony源码

百篇博客分析|本篇为:(读写锁)|内核如何实现多读单写进程通讯相关篇为:v26.08鸿蒙内核源码分析(自旋锁)|当立贞节牌坊的好同志v27.05鸿蒙内核源码分析(互斥锁)|同样是锁它却更丰满v28.04鸿蒙内核源码分析(进程通讯)|九种进程间通讯方式速揽v29.05鸿蒙内核源码分析(信号量)|谁在解决任务间的同步v30.07鸿蒙内核源码分析(事件控制)|多对多任务如何同步v33.03鸿蒙内核源码分析(消息队列)|进程间如何异步传递大数据v76.01鸿蒙内核源码分析

c++ - 什么会导致单写/多读锁的死锁?

我有一个类实例,其他线程中的其他几个类使用该类实例进行通信。这个类使用一个slimreader/writer锁(WinAPI的SRWLOCK)作为一个同步对象和几个RAII辅助类来实际锁定/解锁这个东西:staticunsignedintreadCounter=0;classCReadLock{public:CReadLock(SRWLOCK&Lock):m_Lock(Lock){InterlockedIncrement(&readCounter);AcquireSRWLockShared(&m_Lock);}~CReadLock(){ReleaseSRWLockShared(m_Lo

c - 在单写多读线程中交换缓冲区

故事有一个编写器线程,定期从某个地方收集数据(实时,但这在问题中并不重要)。然后有许多读者从这些数据中阅读。通常的解决方案是使用两个读写器锁和两个缓冲区,如下所示:Writer(case1):acquirelock0loopwritetocurrentbufferacquireotherlockfreethislockswapbufferswaitfornextperiod或者Writer(case2):acquirelock0loopacquireotherlockfreethislockswapbufferswritetocurrentbufferwaitfornextperiod