原创 Linux下多線程編程與信號處理易疏忽的一個例子

這幾天把一個網絡流量採集器程序基本改好了,原來在main函數中把幾個子線程啓動後就睡10分鐘後開始清理子線程後退出。現在想改成子線程啓動後主線程進入無限睡眠,直到收到SIGTERM或SIGINT。主程序如下:其他頭文件#include <

原创 多線程編程 基礎篇 (四)

[wait(),notify()/notityAll()方法]   關於這兩個方法,有很多的內容需要說明.在下面的說明中可能會有很多地方不能一下子明白,但在看完本節後,即使不能完全明白,你也一定要回過頭來記住下面的兩句話:   [wait

原创 Linux系統下的多線程編程入門一

  引言   線程(thread)技術早在60年代就被提出,但真正應用多線程到操作系統中去,是在80年代中期, solaris是這方面的佼佼者。傳統的Unix也支持線程的概念,但是在一個進程(process)中只允許有一個線程,這樣多線程

原创 多線程編程——實戰篇(二)

  本節繼續上一節的討論。   [一個線程在進入對象的休息室(調用該對象的wait()方法)後會釋放對該對象的鎖],基於這個原因。在同步中,除非必要,否則你不應用使用Thread.sleep(long l)方法,因爲sleep方法並不釋放

原创 Linux系統下的多線程編程入門四

  3、條件變量   前一節中我們講述瞭如何使用互斥鎖來實現線程間數據的共享和通信,互斥鎖一個明顯的缺點是它只有兩種狀態:鎖定和非鎖定。而條件變量通過允許線程阻塞和等待另一個線程發送信號的方法彌補了互斥鎖的不足,它常和互斥鎖一起使用。使用

原创 Windows下多線程編程技術及其實現

  本文首先討論16位Windows下不具備的線程的概念,然後着重講述在32位Windows 95環境下多線程的編程技術,最後給出利用該技術的一個實例,即基於Windows95下TCP/IP的可視電話的實現。   一、問題的提出   

原创 Linux系統下的多線程編程入門二

  修改線程的屬性   在上一節的例子裏,我們用pthread_create函數創建了一個線程,在這個線程中,我們使用了默認參數,即將該函數的第二個參數設爲NULL。的確,對大多數程序來說,使用默認屬性就夠了,但我們還是有必要來了解一下線

原创 多線程編程之四——線程的同步

作者:韓耀旭 八、線程的同步   雖然多線程能給我們帶來好處,但是也有不少問題需要解決。例如,對於像磁盤驅動器這樣獨佔性系統資源,由於線程可以執行進程的任何代碼段,且線程的運行是由系統調度自動完成的,具有一定的不確定性,因此就有可能出現兩

原创 多線程編程之二——MFC中的多線程開發

五、MFC對多線程編程的支持   MFC中有兩類線程,分別稱之爲工作者線程和用戶界面線程。二者的主要區別在於工作者線程沒有消息循環,而用戶界面線程有自己的消息隊列和消息循環。  工作者線程沒有消息機制,通常用來執行後臺計算和維護任務,如冗

原创 多線程編程之三——線程間通訊

作者:韓耀旭 七、線程間通訊   一般而言,應用程序中的一個次要線程總是爲主線程執行特定的任務,這樣,主線程和次要線程間必定有一個信息傳遞的渠道,也就是主線程和次要線程間要進行通信。這種線程間的通信不但是難以避免的,而且在多線程編程中也是