在线程内部函数上使用哪种保护方法(互斥,读写锁.)
Which protection method to use (mutex , readwritelock ..) on thread inner function
我有一个线程,它从web服务中轮询数据,然后将其发送到不同的类来处理数据。处理这些数据可能需要很长时间,有时甚至超过调用线程内轮询函数的计时器间隔
我想保护这个轮询功能,也就是说,在处理数据的过程中,不要进入该功能。
我的流程就像这个
workerThread -> start timer -> that invoking the polling method ->
the polling method gets the data and send it to processing > mean while this polling function can be called again .
如果轮询函数的执行时间比函数实现中的轮询计时器长,则可以尝试锁定互斥
void pollingFunction() {
bool isLocked = mutex.tryLock(3000); //timeout if you want
if(isLocked)
{
//process the data
}
else
{
return;
}
mutex.unlock();
}
我假设您至少使用了2个线程。一个是由定时器触发的,另一个是处理轮询数据。因此Monitor对象模式将适用于它,您需要为轮询数据定义一个队列,并定义2个条件变量(不满,不空)。如果未满,则可以开始轮询,然后将数据放入队列。如果它不是空的,那么处理可以重新定时数据,并对其进行处理。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用包含互斥锁的类的方法实例化 cpp11 线程
- 我能否通过将函数实现为类对象方法来避免使用互斥锁
- C++ 互斥锁可以交叉方法/变量吗?如果是这样,为什么在这里不起作用?
- 在C++11中实现共享整数计数器而不使用互斥的最简单方法:
- 使用互斥体的正确方法
- 在C++类中构建互斥保护的线程安全方法
- 实现简单线程安全通用互斥锁的正确方法
- 通过私有互斥锁锁定对象的最佳方法是什么
- 在线程内部函数上使用哪种保护方法(互斥,读写锁.)
- 只有 1 种方法的类,让它处理自己的互斥锁是否安全?
- 为什么TMutex方法Acquire()不锁定互斥对象?
- 将互斥锁与其数据相关联的正确方法是什么?
- 使用QtConcurrentRun和互斥的非常简单的方法有时会出现分段错误