使用xcode 6.3.2進行測試
pthread_create(pthread_t *, const pthread_attr_t *, void *(*)(void *), void *)
引數說明
pthread_t * 表示執行緒id,宣告方式pthread_t tid;
const pthread_attr_t * 表示執行緒的引數,參考
void*(*)(void *)表示執行緒開始時執行的函式,如void fun(void*),也可使用類的靜態函式
void* 為第三個引數所代表的函式的引數,即void* fun(void*)中第二個void*
返回值為0表示成功,其他為錯誤
例:
#include #include #include //sleep函式的標頭檔案
void* callfuntoprintfa(void * args);
void* callfuntoprintfb(void * args);
int main(int argc, const char * argv)
pthread_exit( null );//等待執行緒結束後在結束程序
}void* callfuntoprintfa(void * args)
return null;
}void* callfuntoprintfb(void * args)
return null;
}
輸出結果:
a b
a b ……例
#include
#include
#include
void* callfuntoprintfbyargs(void * args);
int main(int argc, const
char * argv)
}pthread_exit( null );//等待執行緒結束後在結束程序
}void* callfuntoprintfbyargs(void * args)
return null;
}
輸出(省略換行符)
cba cba cba cba cab cba cba cba cba …….
輸出混亂,無法確定先後順序
pthread_exit(void *);
描述:呼叫該函式即結束呼叫該函式的程序;
引數 :pthread_t : 執行緒識別符號,即執行緒id,標識唯一執行緒。
例:
#include
#include
#include
pthread_t a;
void* printfthread(void* args);
int main(int argc, const
char * argv)
pthread_exit( null );//等待執行緒結束後在結束程序
}void* printfthread(void* args)
}return
null;
}
輸出為1-50
pthread_exit(null)成功將執行緒結束。
pthread_join(pthread_t, void **);
描述:呼叫pthread_join即等待引數中的執行緒結束後在執行其他執行緒
引數 :pthread_t: 執行緒識別符號,即執行緒id,標識唯一執行緒。
返回值 : 0代表成功。 失敗,返回的則是錯誤號。
未使用阻塞
#include
#include
#include
pthread_t a;
pthread_t b;
void* threada(void* args);
void* threadb(void* args);
int main(int argc, const
char * argv)
pthread_exit( null );//等待執行緒結束後在結束程序
}void* threada(void* args)
return
null;
}void* threadb(void* args)
return
null;
}
輸出
6 1
7 2
3 4
5 8
9 10
使用阻塞
#include
#include
#include
pthread_t a;
pthread_t b;
void* threada(void* args);
void* threadb(void* args);
int main(int argc, const
char * argv)
pthread_exit( null );//等待執行緒結束後在結束程序
}void* threada(void* args)
return
null;
}void* threadb(void* args)
return
null;
}
輸出
1 2
3 4
5 6
7 8
9 10
呼叫pthread_join即等待引數中的執行緒結束後在執行其他執行緒
pthread_yield_np();
描述:呼叫即放棄本輪到該執行緒的執行時間
例:
#include
#include
#include
pthread_t a;
pthread_t b;
int i;
void* threada(void* args);
void* threadb(void* args);
int main(int argc, const
char * argv)
pthread_exit( null );//等待執行緒結束後在結束程序
}void* threada(void* args)
return
null;
}void* threadb(void* args)
printf("threadbisrunning\n");
return
null;
}
輸出
1 2
3 4
5 threadbisrunning
6 7
8 9
10參考:
《現代作業系統》andrew s.tanenbaum著
多執行緒 多執行緒原理
我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...
多執行緒(一) tomcat 多執行緒
web server允許的最大執行緒連線數還受制於作業系統的核心引數設定,通常windows是2000個左右,linux是1000個左右。1.編輯tomcat安裝目錄下的conf目錄下的server.xml檔案 maxthreads 150 表示最多同時處理150個連線,tomcat使用執行緒來處理...
多執行緒 理解多執行緒(一)
程序 程序是cpu分配資源的基本單位 執行緒 執行緒是cpu排程的基本單位 資源分配給程序,所有執行緒共享該程序的資源 當執行緒數大於cpu的數量,會出現時間片的輪詢。cpu時間片是直接分配給執行緒的,執行緒拿到cpu時間片就能執行了 cpu時間片不是先分給程序然後再由程序分給程序下的執行緒的。所有...