【发布时间】:2017-01-30 08:09:49
【问题描述】:
我正在编写多线程套接字类。可以同时从多个线程调用BelowBounds() 函数,我需要防止使用互斥锁。这段代码是线程安全的吗?
class UDPSocketHT
{
public:
std::atomic<size_t> m_nSimultaneousRecvCalls;
std::atomic<size_t> m_nPendingOperations;
//...
bool UDPSocketHT::BelowBounds ( )
{
return ( !m_nSimultaneousRecvCalls || ( m_nPendingOperations + 1 <= m_nSimultaneousRecvCalls ) ) ? true : false;
}
}
或者我必须这样写?
bool UDPSocketHT::BelowBounds ( )
{
size_t x = m_nSimultaneousRecvCalls;
size_t y = m_nPendingOperations;
return ( !x || ( y + 1 <= x) ) ? true : false;
}
【问题讨论】:
-
与您的问题无关,但如果您的三元表达式导致
true或false,则根本不需要三元表达式。在你的最后一个例子中,你也可以写return !x || ( y + 1 <= x);
标签: c++ multithreading thread-safety atomic