UNIX环境高级编程第十一章

1.一个进程只能同时处理一件事,有了多个控制线程后,可以把进程设计成为同一时刻能够做不止一件事情

每个线程处理各自独立的任务。

2.每个线程在其进程环境中有一个标识符能够唯一识别他(整个系统中不一定),是线程标识符。他结构类型是pthread_t的结构体。因为pthread_t在不同的系统中是不一样的,所以有pthread_equal来比较两个线程,这样

#include <pthread.h>
pthread_t ntid;
pthread_t tid;

void * thr_fn(void *arg)
{
printf("the thread is:\n");
return((void *)0);
}

int main()
{
int err;
err = pthread_create(&ntid, NULL, thr_fn, NULL);
if(err ==0)
{
printf("thread create success.");
tid = pthread_self();
printf("the pthread ID is:%u\n", (unsigned int)tid);
}

exit(0);
}

3.线程终止

单个线程调用终止的函数exit,_exit或者_Exit,或者单个线程收到默认动作为终止的信号,线程也会终止。所以我们要通过以下方法终止线程停止控制流而不影响整个进程:①从启动例程返回,②被同一进程其他线程取消③线程调用pthread_exit。

4.pthread_exit:线程间同步的操作,使一个线程等待另一个线程结束。代码如果没有这个函数,主线程会很快结束而子代码没有运行的机会。

int pthread_join(pthread_t thread, void **rval_ptr)

调用线程将一直阻塞,直到括号中指定线程调用pthread_exit。如果线程从他启动例程返回,ptr包含返回码。如果线程被取消,ptr指定的内存单元是PTHREAD_CANCELED。

通过调用pthread_join,把线程置于分离,资源就可以恢复。如果线程已经分离状态,调用会失败,返回EINVAL。

 

posted @ 2016-12-27 15:57  尹盛  阅读(149)  评论(0编辑  收藏  举报