隨想錄(為什麼迴圈佇列具有先天的並行性)

2021-06-08 16:43:19 字數 1822 閱讀 7104

迴圈佇列是很多人喜歡用的一種資料結構。本著先來先服務的特性,迴圈佇列是一種十分簡單、健壯的資料結構。不像鍊錶、二叉樹,如果使用不慎,就會造成很大的麻煩,但是在迴圈佇列上面則沒有這個煩惱。

同樣而言,迴圈佇列具有很強的並行性,如果服務的資料比較少,那麼完全可以利用兩個執行緒進行資料的儲存和處理工作。只要注意在編寫佇列的時候不要引入公共引數,那麼幾乎不會有任何的並行煩惱。這其中的原因就在於,迴圈佇列沒有公共變數,所以不存在對公共變數的修改問題。佇列是否為空或者是否為滿,完全可以由佇列的start和end這兩個引數決定,而這兩個引數的修改是分開來的,不可能在乙個執行緒上面解決,這就是佇列並行的本質原因。

#include #include #include #include struct queue

;#define status int

#define true 1

#define false 0

struct queue* alloc_queue(int count)

p_queue = (struct queue*)malloc(sizeof(struct queue));

if(null == p_queue)

memset(p_queue, 0, sizeof(struct queue));

p_queue->count = count;

p_queue->buffer = (int*)malloc(sizeof(int)* count);

if(null == p_queue->buffer)

memset(p_queue->buffer, 0, sizeof(int) * count);

return p_queue;

error2:

free(p_queue);

error1:

return null;

}status add_data_into_queue(struct queue* p_queue, int data)

if(p_queue->end == (p_queue->start + 1) % p_queue->count)

p_queue->buffer[p_queue->start] = data;

p_queue->start = (p_queue->start + 1) % p_queue->count;

return true;

}status get_data_from_queue(struct queue* p_queue, int* p_data)

if(p_queue->start == p_queue->end)

p_data[0] = p_queue->buffer[p_queue->end];

p_queue->end = (p_queue->end + 1) % p_queue->count;

return true;

}static void* set_func(void* args)

while(1)

end:

return null;

}static void* get_func(void* args)

while(1)

end:

return null;

}int main(int argc, char* argv)

if(pthread_create(&pid1, null, set_func, p_queue))

if(pthread_create(&pid2, null, get_func, p_queue))

while(1)

end:

return 1;

}

軟體隨想錄

最近閱讀了由阮一峰翻譯的,有程式設計師部落酋長之稱的 joel 撰寫的 軟體隨想錄 精華摘抄如下 就如同所有行業最好的人才一樣,那些優秀的程式設計師是不會出現在招聘市場的。通常優秀的程式設計師在整個職業生涯中,可能會有4次求職。實習生制度創造了輸送優秀人才的管道,但是這個管道比較長,而且一路上損耗很...

專案隨想錄

發現自己不怎麼會起題目了。中午回去還沒走到寢室,就接到劉老師的 說要把程式調通,於是中午吃完飯立馬跑回去,把顯示問題解決了。其實那個無效數字問題是因為在hql語句中使用了cast pw as integer 將字串轉成integer型,可是資料庫中的內容程式設計了字母加數字,自然會轉換失敗了,唉,真...

雜文 隨想錄

這裡是一些隨想。關於名為二氫婦女的使用者本人,希望 ta 能有乙個美好的未來。科學雖然給我們許多驚奇,但也攪壞了我們許多好夢。當登上了月球的那一刻,一切有關月的夢都被現實的蒼涼所破碎了。從那一步邁出起,廣寒宮破碎,輝夜姬亦未曾回到月上,阿爾忒彌斯丟失了金弓與駕月之車,一切有關月的神話於此失去光輝,人...