簡體   English   中英

使用條件變量的簡單多線程堆棧實現

[英]Simple Multi-threading Stack Implementation using Conditional Variables

在我們的CS課程中,我們使用POSIX線程編程來實現簡單的堆棧數據結構。 因此,我們使用了pthread_cond_waitpthread_cond_signal

pthread_mutex_t write_mutex; 
pthread_mutex_t read_mutex; 

pthread_cond_t write_cond; 
pthread_cond_t read_cond;

int read()
{
    pthread_mutex_lock(&read_mutex); 
    while(is_empty())
    {
        pthred_cond_wait(&read_cond, &read_mutex);
    }
    // read value [...]
    pthread_cond_signal(&write_cond);
    pthread_mutex_unlock(&read_mutex);

    return read_value;

}

寫函數的實現類似,但鎖定write_mutex信號read_cond

問:我的實現問題是:由於信號的緣故,這在閱讀文章與寫作之間是否不需要1:1的比例嗎? 由於每次寫入都需要在讀取功能中觸發一個信號(因此多次讀取),因此此實現方法不允許寫入多個項目而之間不進行任何讀取。

我的理解正確嗎?還是我缺少什么?

Q2調用pthread_cond_signal(...)后信號“有效”多長時間?

:我的實現問題是:由於信號的緣故,這在閱讀文章與寫作之間是否不需要1:1的比例嗎? 由於每次寫入都需要在讀取功能中觸發一個信號(因此多次讀取),因此此實現方法不允許寫入多個項目而之間不進行任何讀取。

如果write()函數確實類似於所示的read()函數,則為是和否。 我認為您是在建議堆棧永遠不能只有一個以上的元素,但事實並非如此。 請注意,進入您的read()函數並查找非空堆棧的線程將如何完全繞過條件變量的等待。 如果堆棧為空,則線程僅等待讀取。 另一方面,類似的情況是線程僅在堆棧已滿時才等待寫入。

Q2調用pthread_cond_signal(...)后信號“有效”多長時間?

根本沒有時間。 發出CV信號時,只有已經等待條件變量的線程才能被解除阻塞。 此后,即使沒有線程被阻塞,也沒有任何已接收信號的存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM