std::string ms_tasks;
std::mutex ms_tasks_mutex;
void AddTask(const std::string& task)
{
std::lock_guard<std::mutex> _lock(ms_tasks_mutex);
//...
ms_tasks = task;
//...
}
void DealTask()
{
std::lock_guard<std::mutex> _lock(ms_tasks_mutex);
//read and wirte ms_tasks here
//...
}
//线程1
void poll1()
{
while(...)
{
std::string s=...
//...
AddTask(s);
//...
//sleep some time
}
}
//线程2
void poll2()
{
while(...)
{
//...
DealTask();
//...
//sleep some time
}
}
类似以上的代码,运行一段时间后就崩了,两线程同时操作同一字符串,我已加锁,看了这编文章后恍然大悟:
https://www.cnblogs.com/alantu2018/p/8503270.html
原来是触发了std::string的copy-on-write机制了。
把代码改成:
ms_tasks = task.c_str();
就解决问题了