2017-10-21 87 views
0

這似乎是一個簡單的任務,但它不起作用。我的線程函數運行在一個循環中,並始終將數據寫入數組。但有時我想從我的主要功能中讀取這些數據。因此,閱讀功能應理想地暫停線程,讀取數據,然後恢復線程。但是,讀取的值不正確,似乎已損壞。也許有些不妥:pthread讀/寫同步

線程FCT:

void threadfct() 
{ 
    while (1) 
    { 
     pthread_mutex_lock(&mutex); 
     data = write_data(); 
     pthread_mutex_unlock(&mutex); 
    } 
} 

功能是從主循環調用應改爲由線程函數寫入的數據:

void read_data() 
{ 
    printf("Daten: %f\n", data[0]); 
} 
+1

您需要顯示更多上下文。你是否真的在沒有獲取互斥鎖的情況下閱讀數據? –

+0

使用std :: thread。 – 2017-10-21 17:09:20

+0

@FlorianWeimer暗示的是,互斥體只有在兩個線程都在進入臨界區之前試圖進入纔會有效。 – CplusPuzzle

回答

0

試此更改:

void read_data() 
{ 
    pthread_mutex_lock(&mutex); 
    printf("Daten: %f\n", data[0]); 
    pthread_mutex_unlock(&mutex); 
} 
+0

我做過了,但它似乎阻止了我的程序的執行。 – Lemonbonbon

+0

@ Lemonbonbon那麼你鎖定了另一個互斥鎖? – 2017-10-21 17:12:27

+1

所以請告訴我們更多關於您的程序,線程是如何創建的,您期望看到的以及您實際看到的內容 – CplusPuzzle