我有兩個線程。 一個是創建struct和填充數據它:在不同線程的struct中修改變量
int main(int argc, char *argv[]) {
struct arg_struct args;
args.remoteSockfd = remoteSockfd;
/*...*/
args.active = 1;
然後我將其添加到陣列:
while(activeSockets[index].active!=0){
index++;
}
activeSockets[index] = args;
和創建新線程:
(void) pthread_create(&serverThread, NULL, threadBody, &args);
}
在第二線程我有:
void *threadBody(void *args) {
/*...*/
arg_struct *foo = (arg_struct*) (args);
}
所以,現在我可以在結構上訪問變量:
sockfd = foo->remoteSockfd;
但是當我嘗試對它們進行修改:
foo->active=0;
它不會在第一線變化的變量。我怎樣才能修改第一個線程從另一個線程結構?
這是需要你的代碼的整個部分,而不僅僅是一些部分。 – zoska
如果在其他地方沒有錯誤......你是否試圖簡單地將'active'聲明爲'volatile'? –
我認爲你需要閱讀多線程的教科書,特別是鎖定和跨線程內存一致性。 (如果你對https://www.kernel.org/doc/Documentation/memory-barriers.txt的反應是「是的,是的,我知道這一切」,請忽略此評論。) – zwol