存档

文章标签 ‘操作系统’

在单CPU上使用多线程

2010年1月27日 行者 没有评论

  假设我们略微修改我们的例子,让它能演示有些时候在单处理器上使用多线程的好处。

  在这个修改的例子里面,网络中的一个节点负责计算扫描线(与前面的图像例子一样)。不过,当一个扫描线的计算结束后,它的数据就通过网络发送到另外一个节点。下面是我们修改后的main()函数:

阅读全文…

多线程中壁垒(barrier)的使用

2010年1月27日 行者 没有评论

  前面我们讲过main()函数与工作线程结束进行的同步,在那里提到了两种方式:pthread_join()函数以及壁垒(barrier)。

  现在我们回到房子的比喻,假设这个家庭准备到哪个地方旅行。司机上了小货车并发动了引擎。之后,司机就开始等待。只有全部的家庭成员都上车之后,这个小货车才会开动——因为我们不想把任何人落下!

  这和我们在前面说的那个绘图程序的原理是一模一样的。主线程要等待全部工作线程结束后,才执行下一步的程序。

  不过和这个比喻还有一个很大的差别。那就是通过使用pthread_join()函数,我们是等待所有工作线程的结束。也就是说,之后这些线程已经不存在了,它们退出了。

阅读全文…

线程的启动

2010年1月18日 行者 没有评论

  任何线程在同一个进程中都可以创建另一个线程,这没有任何的限制。创建线程最常用的就是POSIX函数pthread_create(),该函数的定义如下:

#include <pthread.h>

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

  函数pthread_create()有四个参数:

  thread  一个指向pthread_t的指针,在那里保存着线程的ID;

阅读全文…