UNIX编程(12)-线程控制
1.线程限制
某些系统有线程的限制,可以通过sysconf函数来查询
2.线程属性
如想修改线程的属性,则可以在pthread_create调用时,传递pthread_attr_t类型指针参数
?
?
pthread_attr_t *restrict * *restrict * *restrict , size_t *restrict , size_t * pthread_mutexattr_t * restrict (pthread_mutexattr_t * pthread_mutexattr_t * restrict *restrict *
2)读写锁属性
?
*(pthread_rwlockattr_t * pthread_rwlockattr_t * restrict (pthread_rwlockattr_t * * pthread_condattr_t * restrict *(* void * *restrict *restrict (*parent)(void), void (*child)(void));?
Returns: 0 if OK, error number on failure
例:
#include "apue.h"#include <pthread.h>pthread_mutex_t lock1 = PTHREAD_MUTEX_INITIALIZER;pthread_mutex_t lock2 = PTHREAD_MUTEX_INITIALIZER;voidprepare(void){ printf("preparing locks...\n"); pthread_mutex_lock(&lock1); pthread_mutex_lock(&lock2);}voidparent(void){ printf("parent unlocking locks...\n"); pthread_mutex_unlock(&lock1); pthread_mutex_unlock(&lock2);}voidchild(void){ printf("child unlocking locks...\n"); pthread_mutex_unlock(&lock1); pthread_mutex_unlock(&lock2);}void *thr_fn(void *arg){ printf("thread started...\n"); pause(); return(0);}intmain(void){ int err; pid_t pid; pthread_t tid;#if defined(BSD) || defined(MACOS) printf("pthread_atfork is unsupported\n");#else if ((err = pthread_atfork(prepare, parent, child)) != 0) err_exit(err, "can't install fork handlers"); err = pthread_create(&tid, NULL, thr_fn, 0); if (err != 0) err_exit(err, "can't create thread"); sleep(2); printf("parent about to fork...\n"); if ((pid = fork()) < 0) err_quit("fork failed"); else if (pid == 0) /* child */ printf("child returned from fork\n"); else /* parent */ printf("parent returned from fork\n");#endif exit(0);}?9.线程和IO
pread pwrite在多线程环境中非常有帮助