類定義多線程程序會導致段故障,使用的std ::目錄::的push_back
class TaskWorker
{
...
private:
std::list<client_det*> clientList;
...
public:
void waitForClientResponse();
};
功能運行類的成員函數作爲線程
void* waitForResponse(void* w)
{
TaskWorker* worker = static_cast<TaskWorker*>(w);
worker->waitForClientResponse();
}
線程函數實現
void TaskWorker::waitForClientResponse()
{
client_det* obj = new client_det();
...
clientList.push_back(obj); //valgrind says access violation
...
}
這個實現有什麼問題嗎?
訪問私有成員列表的線程類成員函數是否有任何限制?
線程調用
int TaskWorker::assign_and_wait(std::list<MulticastGroupInfo*> groupList)
{
...
...
pthread_t tid;
pthread_create(&tid, NULL, waitForResponse, this);
}
更新
我編譯代碼,無需調試符號和碰撞吸走了。這是我最近的觀察。
任何人都可以啓發我這裏發生了什麼?
你確定'w'不是'NULL'嗎? – HAL
@HAL我添加了調用線程函數的代碼。我從另一個成員函數傳遞'this'。是對的嗎? – cppcoder
有多少線程試圖同時修改'clientList'? – Bill