linux下C語言執行緒的介紹

2021-06-17 19:57:38 字數 3640 閱讀 1648

linux下c語言執行緒的介紹

ree雪影

今天一天小記。。

linux下執行緒的介紹

下面是主要的函式介紹:

建立執行緒要實現的函式

int pthread_create(pthread_t *thread,pthread_attr_t *attr,void * (*start_routine)(void *),void *arg);

gcc編譯多執行緒程式時,必須與pthread函式庫連線。有2種方法

1.gcc -d_reentrant -o aa 1.c -lpthread

2.gcc -pthread -o aa 1.c

用訊號量進行同步

1.訊號量的建立

int sem_init(sem_t *sem,int pshared,unsigned int value);

2.控制訊號量

int sem_wait(sem_t *sem);

int sem_post(sem_t *sem);

3.清理訊號

int sem_destory(sem_t sem);

用互斥量進行同步

1.執行緒的互斥量

pthread_mutex_t a_mutex = pthread_mutex_initializer或者pthread_recursive_mutex_initializer_np(同乙個執行緒多次鎖定它不會產生死鎖);

int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *mutexattr);

2.鎖定和解除鎖定互斥量

int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

3.銷毀互斥量

int int pthread_mutex_destroy(pthread_mutex_t *mutex);

執行緒屬性物件

1.建立執行緒屬性物件

int pthread_attr_init(pthread_attr_t *attr);

2.**函式(顧名思義)

int pthread_attr_destroy(pthread_attr_t *attr);

3.設定不同的執行緒屬性

int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);(設定脫離狀態)

int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy);(改變排程屬性)

...可用於建立脫離執行緒。

取消乙個執行緒

1.執行緒終止

int pthread_cancel(pthread_t thread);

2.設定執行緒的取消狀態

int pthread_setcancelstate(int state,int *oldstate);

3.設定取消型別

int pthread_setcanceltype(int type,int *oldtype);

用條件變數改進執行緒同步

1.建立和初始化條件變數

pthread_cond_t got_request = pthread_cond_initializer;

2.向條件變數發出訊號

int rc = pthread_cond_singal(&got_request);

或使用廣播函式

int rc = pthread_cond_broadcast(&got_request);

4.守候條件變數

pthread_cond_wait()

pthread_cond_timedwait()

下面是一些例子程式的源**:

1.#include

#include

//新執行緒將要執行的函式

void * do_loop(void * data)

//退出執行緒

pthread_exit(null);

}//main函式

int main(int argc,char *argv)

2.#include

#include

#include

#include

#include

char message = "hello world!";

void *thread_function(void *arg)

int main()

printf("waiting for thread to finish...n");

res = pthread_join(a_thread,&thread_result);

if(res!=0)

printf("thread joined,it return %sn",(char *)thread_result);

printf("message is now %sn",message);

exit(exit_success);}3.

#include

#include

#include

#include

#include

#include

sem_t bin_sem;

#define work_size 1024

char work_area[work_size];

void *thread_function(void *arg)

pthread_exit(null);

}int main()

res = pthread_create(&a_thread,null,thread_function,null);

if(res!=0)

printf("input some text.enter 'end' to finish:n");

while(strncmp("end",work_area,3)!=0)

printf("nwaiting for thread to finish...n");

res = pthread_join(a_thread,&thread_result);

if(res!=0)

printf("thread joinedn");

sem_destroy(&bin_sem);

exit(exit_success);}4.

#include

#include

#include

#include

#define num_threads 6

void *thread_function(void *arg)

int main()

sleep(1);

} printf("waiting for threads to finish...n");

for(lots_of_threads = num_threads - 1;lots_of_threads >= 0;lots_of_threads--)

else

} printf("all done!");

exit(exit_success);}

linux下的C語言開發(執行緒等待)

和多程序一樣,多執行緒也有自己的等待函式。這個等待函式就是pthread join函式。那麼這個函式有什麼用呢?我們其實可以用它來等待執行緒執行結束。include include include include void func void args int main pthread join p...

linux下的C語言開發(執行緒等待)

和多程序一樣,多執行緒也有自己的等待函式。這個等待函式就是pthread join函式。那麼這個函式有什麼用呢?我們其實可以用它來等待執行緒執行結束。cpp view plain copy include include include include void func void args int...

linux下的C語言開發(執行緒等待)

和多程序一樣,多執行緒也有自己的等待函式。這個等待函式就是pthread join函式。那麼這個函式有什麼用呢?我們其實可以用它來等待執行緒執行結束。cpp view plain copy include include include include void func void args int...