1. 多线程程序(多任务、并发工作方式)的优缺点:
提高应用程序响应。
多cpu系统更加有效。
改善程序结构。
LIBC的pthread库提供大量API函数
2.实验源代码
主程序中启动生产者线程和消费者线程。
生产者线程不断顺序地将0到1000的数字写入共享的循环缓冲区。
消费者线程不断地从共享的循环缓冲区读取数据。
线程创建函数:
int pthread_create(
pthread_t *thread_id, /* 指向线程标识符的指针 */
__const pthread_attr_t *attr, /* 设置线程属性 */pthread_cond_wait
void *(*__start_routine)(void *),/*线程运行函数的起始地址(函数指针)*/
void *__restrict__arg /*运行函数的参数 */
)
线程创建成功时函数返回0,若不为0则创建线程失败。
获得父进程:pthread_t pthread_self(void)
测试两处线程号是否相同:
int pthread_equal(pthread_t__thread1,pthread_t__thread2)
线程退出:
void pthread_exit(void *__retval)
一个线程的结束有两种途径,一种是函数结束了,调用这的线程也就结束了,另一种方式是通过此函数来实现。唯一的参数是函数返回代码,只要pthread_join 中的第二个参数不是NULL,这个值将被传递给thread_return。一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码。
等待指定的线程结束:
int pthread_join(
pthread_t__th, /* 被等待的线程标志符*/
void **__thread_return /* 用户定义的指针,可以用来存储被等待线程的返回值*/
)
此函数为线程阻塞函数,调用它的函数将一直等待骊被等待的线程结束为止,函数返回时,被等待的线程资源被收回。
互斥量初始化:
pthread_mutex_init(pthread_mutex_t *,__const pthread_mutexattr_t *)
销毁互斥量:
int pthread_mutex_destroy(pthread_mutex_t *__mutex)
再试一次获得对互斥量的锁定(非阻塞):
int pthread_mutex_trylock(pthread_mutex_t *__mutex)
锁定互斥量(阻塞):
int pthread_mutex_lock(pthread_mutex_t *__mutex)
解锁互斥量:
int pthread_mutex_unlock(pthread_mutex_t *__mutex)
条件变量初始化:
int pthread_cond_init(pthread_cond_t *__restrict__cond, /*指向结构pthread_cond_t的指针*/
__const pthread_condattr_t *__restrict__cond_attr /*指向结构pthread_condattr_t的指针*/
)
条件变量的结构为pthread_cond_t.此函数用来初始化一个条件变量。结构pthread_condattr_t是条件变量的属性结构,用它来设置条件变量是进程内可用还是进程间可用。
销毁条件变量COND:
int pthread_cond_destroy(pthread_cond_t *__cond)
唤醒线程等待条件变量:
int pthread_cond_signal(pthread_cond_t *__cond)
释放被阻塞在条件变量cond上的一个线程。多个线程阻塞在此条件变量上时,哪一个线程被唤醒是由线程调试策略所决定的。
等待条件变量(阻塞):
int pthread_cond_wait(pthread_cond_t *__restrict__cond,pthread_mutex_t *__restrict__mutex)
使线程阻塞在一个条件变量上。线程解开mutex指向的锁,并被条件变量cond阻塞。
在指定的时间到达前等待条件变量:
int pthread_cond_timewait(pthread_cond_t *restrict__cond,pthread_mutex_t *__restrict__mutex,__const struct timespec *__restrict__abstime)
|