我寫日誌信息的功能。 我將從不同的線程調用此打印功能。 我的代碼如下:C++成員函數線程安全
MyLog::printLog(const char* s)
{
std::string myline(s);
//m_Mutex is class member and there will be only object for this class
// shared by all threads
int ret = pthread_mutex_lock(&m_Mutex);
if (ret != 0)
{
std::cout<<" trying to lock same mutex char* "<<std::endl;
}
//code to log message in File
pthread_mutex_unlock(&m_Mutex);
}
我的問題是,如果上述功能從不同的線程調用參數,如「從線程1」,「從線程2」,......會不會有任何機會爲const char * s會混亂打印錯誤的值。? 我希望我的問題很清楚。
其實,我的疑問是,當打印日誌被稱爲thred1,爲const char * S仍將指向堆棧變量是perfectlly確定。但是當第二個線程調用它並將它存儲到第一個線程的局部變量之前,線程2中沒有任何機會'會指向局部變量導致混亂?我希望我有道理 –
我不確定我是否關注你,但傳遞給函數的參數是'const',因此你不能改變它,你必須在做任何改變之前複製它,所以沒有改變的混亂。你將它複製到'std :: string'中,複製數據,所以它們都是本地線程。 –
行..還有另一個函數,我正在實現作爲MyLog :: printLog(char * s)爲:{std :: string myline(s); int ret = pthread_mutex_lock(&m_Mutex); if(ret!= 0){std :: cout <<「試圖鎖定相同的互斥字符*」<< std :: endl; } //在文件中記錄消息的代碼pthread_mutex_unlock(&m_Mutex); }在這種情況下會出現問題嗎?作爲它的char *而不是const char *? –