POSIX 執行緒程式設計指南(二)

2021-07-25 13:33:24 字數 3703 閱讀 2090

例程:

int pthread_create(pthread_t *

thread

, const pthread_attr_t *

attr

, void *(*

start_routine

) (void *), void *

arg);

(注:原文通篇沒有引數型別,對於一些必要的介面,我會從上面copy後貼上與此)

建立執行緒:

程序能建立的執行緒數量因平台而不同。企圖超出這個限制會導致失敗或者其他意想不到的結果.

查詢和設定實現的執行緒限制-linux示例.展示了查詢預設(軟體)限制並設定硬體限制的程序(包括執行緒)最大數量.然後驗證限制已經被重寫.

bash / ksh / sh

tcsh / csh

$ ulimit -a

core file size (blocks, -c) 16

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 255956

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 1024

pipe size (512 bytes, -p) 8

posix message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) unlimited

cpu time (seconds, -t) unlimited

max user processes (-u) 1024

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

$ ulimit -hu

7168

$ ulimit -u 7168

$ ulimit -a

core file size (blocks, -c) 16

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 255956

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 1024

pipe size (512 bytes, -p) 8

posix message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) unlimited

cpu time (seconds, -t) unlimited

max user processes (-u) 7168

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

% limit 

cputime unlimited

filesize unlimited

datasize unlimited

stacksize unlimited

coredumpsize 16 kbytes

memoryuse unlimited

vmemoryuse unlimited

descriptors 1024

memorylocked 64 kbytes

maxproc 1024

% limit maxproc unlimited

% limit

cputime unlimited

filesize unlimited

datasize unlimited

stacksize unlimited

coredumpsize 16 kbytes

memoryuse unlimited

vmemoryuse unlimited

descriptors 1024

memorylocked 64 kbytes

maxproc 7168

其中一些屬性稍後討論.

question: 執行緒被建立後,你如何知道

a)它在何時被作業系統排程?

b)它將在哪個處理/核心上執行? 

如果沒有使用pthreads的排程機制,何時、何地執行執行緒由實現或者作業系統決定.乙個健壯的程式絕不能依賴固定的執行緒執行順序或者特定的處理器/核心

pthread_exit() 例程允許程式設計師指定乙個可選的終結狀態引數. 可選引數在典型情況下會返回給 「joining」 此執行緒的執行緒..

對於正常執行結束的子例程,可以不呼叫 pthread_exit() – 除非你想取回可選的狀態碼..

discussion on calling pthread_exit() from main():

#include #include #include #define num_threads	5

void *printhello(void *threadid)

int main(int argc, char *argv)

int main(int argc, char *argv)

;struct thread_data thread_data_array[num_threads];

void *printhello(void *threadarg)

int main(int argc, char *argv)

int main(int argc, char *argv)

{pthread_t threads[num_threads];

int rc;

long t;

for(t=0;t

Posix執行緒程式設計指南 2

概念及作用 在單執行緒程式中,我們經常要用到 全域性變數 以實現多個函式間共享資料。在多執行緒環境下,由於資料空間是共享的,因此全域性變數也為所有執行緒所共有。但有時應用程式設計中有必要提供執行緒私有的全域性變數,僅在某個執行緒中有效,但卻可以跨多個函式訪問,比如程式可能需要每個執行緒維護乙個鍊錶,...

Posix執行緒程式設計指南 5

posix執行緒程式設計指南 5 日期 2006 2 13 14 46 00 host01.com 訪問 是乙個關於posix執行緒程式設計的專欄。作者在闡明概念的基礎上,將向您詳細講述posix執行緒庫api。本文是第五篇將向您講述pthread self pthread equal 和pthre...

Posix執行緒程式設計指南 2

概念及作用 在單執行緒程式中,我們經常要用到 全域性變數 以實現多個函式間共享資料。在多執行緒環境下,由於資料空間是共享的,因此全域性變數也為所有執行緒所共有。但有時應用程式設計中有必要提供執行緒私有的全域性變數,僅在某個執行緒中有效,但卻可以跨多個函式訪問,比如程式可能需要每個執行緒維護乙個鍊錶,...