Ich schreibe Multithreaded Socket-Klasse. Die Funktion BelowBounds() kann von mehreren Threads gleichzeitig aufgerufen werden, ich muss die Verwendung von Mutexes verhindern. Ist dieser Code Thread-sicher?Ist atomare Zunahme und comparison thread-safe
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;
}
}
Oder muss ich auf diese Weise schreiben?
bool UDPSocketHT::BelowBounds ()
{
size_t x = m_nSimultaneousRecvCalls;
size_t y = m_nPendingOperations;
return (!x || (y + 1 <= x)) ? true : false;
}
Nicht verwandt mit Ihrer Frage, aber wenn Sie einen ternären Ausdruck haben, der zu 'true' oder' false' führt, brauchen Sie keinen ternären Ausdruck. In Ihrem letzten Beispiel könnten Sie genauso gut 'return! X || schreiben (y + 1 <= x); ' –