這是這個主題後,下一步:Modifying data in threads原子類型和線程
class Nginx_sender
{
private:
std::atomic_int data;
boost::mutex mMutex;
void SendMessage(const std::string &msg)
{
mMutex.lock();
data++;
mMutex.unlock();
std::cout << "DATA: " << data << std::endl;
}
void NewThreadFunction()
{
while(true) {
mMutex.lock();
std::cout << data;
mMutex.unlock();
boost::this_thread::sleep(boost::posix_time::milliseconds(200));
}
}
};
int main()
{
Nginx_sender *NginxSenderHandle;
boost::thread sender(boost::bind(&Nginx_sender::NewThreadFunction, &NginxSenderHandle));
// ...
}
在NewThreadFunction
數據始終爲0,並在SendMessage
它每次我打電話SendMessage
時間而改變。那麼,什麼是正確的方式來處理這個?
您正在將局部變量的地址傳遞給另一個線程,這是一個壞主意。在你的情況下,它可能會失敗,因爲'main'在程序(和另一個線程)退出之前不會返回,但是您應該考慮爲此動態分配。 –