2
我在寫多線程套接字類。 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);' –