标签:unix环境高级编程 thread 线程
#include <pthread.h> int pthread_equal(pthread_t tid1,pthread_t tid2); Returns: nonzero if equal, 0 otherwise
#include <pthread.h> pthread_t pthread_self(void); Returns: the thread ID of the calling thread
#include <pthread.h> int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg); Returns: 0 if OK, error number on failure
1)从启动例程返回(return),返回值为线程退出码
2)被同进程的其他线程取消
3)调用pthread_exit
#include <pthread.h> void pthread_exit(void *rval_ptr);
#include <pthread.h> int pthread_join(pthread_t thread,void **rval_ptr); Returns: 0 if OK, error number on failure
#include <pthread.h> int pthread_cancel(pthread_t tid); Returns: 0 if OK, error number on failure
#include <pthread.h> void pthread_cleanup_push(void (*rtn)(void *), void *arg); void pthread_cleanup_pop(int execute);
a
.线程调用pthread_exitb.应答其他线程的cancellation请求
c.
execute参数非0
#include "apue.h" #include "myerr.h" #include <pthread.h> void cleanup(void *arg) { printf("cleanup: %s\n", (char *)arg); } void * thr_fn1(void *arg) { printf("thread 1 start\n"); pthread_cleanup_push(cleanup, "thread 1 first handler"); pthread_cleanup_push(cleanup, "thread 1 second handler"); printf("thread 1 push complete\n"); if (arg) return((void *)1); pthread_cleanup_pop(0); pthread_cleanup_pop(0); return((void *)1); } void * thr_fn2(void *arg) { printf("thread 2 start\n"); pthread_cleanup_push(cleanup, "thread 2 first handler"); pthread_cleanup_push(cleanup, "thread 2 second handler"); printf("thread 2 push complete\n"); if (arg) pthread_exit((void *)2); pthread_cleanup_pop(0); pthread_cleanup_pop(0); pthread_exit((void *)2); } int main(void) { int err; pthread_t tid1, tid2; void *tret; err = pthread_create(&tid1, NULL, thr_fn1, (void *)1); if (err != 0) err_exit(err, "can’t create thread 1"); err = pthread_create(&tid2, NULL, thr_fn2, (void *)1); if (err != 0) err_exit(err, "can’t create thread 2"); err = pthread_join(tid1, &tret); if (err != 0) err_exit(err, "can’t join with thread 1"); printf("thread 1 exit code %ld\n", (long)tret); err = pthread_join(tid2, &tret); if (err != 0) err_exit(err, "can’t join with thread 2"); printf("thread 2 exit code %ld\n", (long)tret); exit(0); }
windeal@ubuntu:~/Windeal/apue$ ./exe thread 2 start thread 2 push complete cleanup: thread 2 second handler cleanup: thread 2 first handler thread 1 start thread 1 push complete cleanup: thread 1 second handler thread 1 exit code 1 thread 2 exit code 2 windeal@ubuntu:~/Windeal/apue$
标签:unix环境高级编程 thread 线程
原文地址:http://blog.csdn.net/windeal3203/article/details/39495793