2012-11-24 34 views
2

我有一個關於pthread的問題,當我用malloc在一個線程內創建一個變量,然後將它的指針傳遞給一個共享結構,即fifo,線程1傳遞的指針將被訪問由thread2?malloc在一個線程中的變量

請注意,我必須爲上述問題編寫代碼,我只是想更好地理解線程,下面是我正在考慮的內容。環境是並行線程ÇLinux的

據我知道的線程共享它們的父進程的內存,如果這是下面的應該是正確的情況。

void *thread-1(void *pointer) 
{ 
    int *intp = malloc(4); 
    send_to_fifo(intp); 
} 


void *thread-2(void *pointer) 
{ 
    int *iptr; 
    iptr = read_from_fifo(); 
    do_something(iptr); 
    free(iptr); 
} 
+1

'thread-1'?!?這不是c中的標識符。使用'thread_1'或'thread1'。 – dmckee

回答

6

是線程1傳遞的指針將線程2被訪問?

是的:因爲所有線程都在共同的內存空間中運行,所以這是允許的。

mallocfree和其他內存管理功能默認是線程安全的,除非使用NO_THREADS進行編譯。

3

當然,你可以做到這一點。但是,當其他線程使用它時,必須小心不要寫入變量。你需要同步。

對於你的情況,如果線程同時運行(thread2不等待thread1完成),你有競爭條件:thread2或者在thread1將任何東西放到fifo或之後執行所有的代碼。

+0

我一直在想,如果read_from_fifo和send_to_fifo有鎖,那應該沒問題吧? – user1832809

+0

不一定 - 如果thread2首先執行它的代碼,那麼'read_from_fifo'將會讀取一個空的fifo(或不是,取決於程序的其餘部分),這可能會導致問題。在thread1中分配的內存永遠不會被釋放。如果'read_from_fifo'等待某事處於fifo狀態,則應該沒問題。 – zch

相關問題