это следующий шаг после этой темы: 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' не возвращается, пока программа (и другой поток) не выйдет, но вы должны рассмотреть динамическое распределение для этого. –