多執行緒下傳區域性變數引數時,引數一定要new分配記憶體

2021-05-24 22:33:06 字數 1022 閱讀 2003

建立多個執行緒並傳引數時,如果傳入的引數是個區域性變數,最好new記憶體然後在thread中釋放記憶體,否則這塊記憶體容易被覆蓋而導致thread中用的資料發生變化。示例如下:

struct mac_data{

string mac;

string account;

string password;

string status;

void function1()

vectormacs =  vector();

code to add items to macs;

for (unsigned int i = 0;i < macs.size();i++) 

struct mac_data *m = new mac_data();

m->status = macs[i].status;

cout<<"begin to setup machine "status !=macready && m->status !=macbusy)//1 means ready, 2 means running cases

m->mac = macs[i].mac;

m->account = macs[i].account;

m->password = macs[i].password;

rc = pthread_create(&prethreads[i],&attr,prepareenv,(void *)m);

if(rc)

cout<<"pthread_create error code "int status =0;

if(1 >0)

struct mac_data *t;

t = (struct mac_data *) threadarg;

struct mac_data m;

m.mac = t->mac;

m.password = t->password;

m.account = t->account;

delete t;

return null;

js區域性變數,引數

所有函式的引數都是按值傳遞的。也就是說,把函式外部的值複製給函式內部的引數,就和把值從乙個變數複製到另乙個變數一樣。基本型別值的傳遞如同基本型別變數的賦值一樣。而引用型別值的傳遞,則如同引用型別變數的賦值一樣。不少人困惑,因為變數有按值和按引用兩種方式,而引數只能按值傳遞。在向引數傳遞基本型別和引用...

多執行緒開發時執行緒區域性變數的使用

一 概述 現在多核時代多執行緒開發越來越重要了,多執行緒相比於多程序有諸多優勢 當然也有諸多劣勢 在早期c的庫中,有許多函式是執行緒不安全的,因為內部用到了靜態變數,比如 char strtok char s,const char delim 該函式內部就有乙個靜態指標,如果多個執行緒同時呼叫此函式...

多執行緒 執行緒內區域性變數

該類提供了執行緒內區域性 thread local 變數。好比有兩個視窗 兩個執行緒 乙個視窗可以拿飲料,乙個視窗可以拿食物。現在有多個人要來拿東西,如果在飲料視窗有的人拿到了飲料,有的人拿到了不該拿的食物,就說明執行緒之間出現了混亂,我們應當避免這種情況出現。以下 就可能會出現執行緒混亂的問題 p...