1. 程式人生 > >C語言之多執行緒機制(程式可以同時被執行而不會相互干擾)

C語言之多執行緒機制(程式可以同時被執行而不會相互干擾)

接觸過linux的人或多或少知道,linux有多執行緒的機制,也就是說程式可以同時執行,不受干擾,關於這個在我以前的博文裡有過類似模擬的時間片輪轉程式,跟這個其實是類似的。其實在window上,執行緒的標頭檔案也是可以包含進來使用的,我這裡用DevC++這個軟體來測試,看看執行效果就知道了,接下來我們簡單介紹一下執行緒介面。

      那麼什麼是執行緒呢?

     執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源。

二、什麼時候使用多執行緒?     當多個任務可以並行執行時,可以為每個任務啟動一個執行緒。
三、執行緒的建立     使用pthread_create這樣一個函式:

int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,
(void*)(*start_rtn)(void*),void *arg);

引數

第一個引數為指向執行緒識別符號指標。 第二個引數用來設定執行緒屬性。 第三個引數是執行緒執行函式的起始地址。 最後一個引數是執行函式的引數。 那接下來我們看看如何來使用吧!!! 很簡單,在linux下可以跑這段程式碼,在window上一樣也可以跑,因為這兩個介面在兩個作業系統被相互相容。大笑
瞬間在window上做開發C語言就很強大了,有木有?得意生氣當然一下只是建立了一條執行緒,還可以建立多條程序,不信可以去試試!大笑
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
//執行執行緒的一個函式
void *do_thread(void *arg);

int main(void)
{
	//建立執行緒的id號 
	pthread_t    tid ; 
	int ret ; 
	//建立一條執行緒 
	ret = pthread_create(&tid , NULL , 	do_thread , NULL);
	if(ret != 0)
	{
		fprintf(stderr , "建立執行緒失敗!\n");
		return -1 ; 
	}
	//當執行緒結束時自動釋放id號 
	ret = pthread_detach(tid);	
	while(1)
	{
		printf("Hello world1!\n\n");
		sleep(1);
	}
	return 0 ; 
}
void *do_thread(void *arg)
{
	while(1)
	{
		printf("Hello world2!\n\n");
		sleep(1);
	}
}
執行結果: 兩個死迴圈彼此互不干擾大笑大笑?想知道原因嗎?請持續關注本部落格!