摘要:条件变量是什么?条件变量为我们提供了另一种线程间同步的方法,然而,互斥量是通过控制线程访问数据来实现同步,条件变量允许线程同步是基于数据实际的值。如果没有条件变量,程序员需要让线程不断地轮询,以检查是否满足条件。由于线程处在一个不间断的忙碌状态,所以这是相当耗资源的。条件变量就是这么一个不需要轮询就可以解决这个问题的方法。条件变量总是跟互斥锁(mutex lock)一起使用。
阅读全文
随笔分类 - 嵌入式编程
编程,一个可能会令人头疼的词汇;嵌入式,一个肯定会令人头疼的话题。
摘要:Mutex Variables(互斥量), Mutex(互斥量)是“mutual exclusion”的缩写,互斥量最主要的用途是在多线程中对共享数据同时进行写操作时同步线程并保护数据; 互斥量在保护共享数据资源时可以把它想象成一把锁,在Pthreads库中互斥量最基本的设计思想是在任一时间只有一个线程可以锁定(或拥有)互斥量,因此,即使许多线程尝试去锁定一个互斥量时成功的只会有一个,只有在拥有互斥量的线程开锁后其它的线程才能锁定,就是说,线程必须排队访问被保护的数据。
阅读全文
摘要:Pthreads整理资料如下: 什么是线程,我们为什么需要它?——Linux进程与线程概述;什么是Pthreads?为什么要用Pthreads?——Pthreads概述;如何创建和取消Pthreads线程?——POSIX线程的创建与取消—pthreads线程库实例笔记1;如何连接和分离Pthreads线程?——POSIX线程的连接和分离—pthreads线程库实例笔记2;何为互斥量?Pthreads库的互斥量又是如何使用的呢?——POSIX线程互斥量的使用——pthreads线程库实例笔记3;何为条件变量?Pthreads库的条件变量又是如何使用的呢?——POSIX线程库条件变量的使用——Pt
阅读全文
摘要:什么是 Pthreads?
在过去,硬件提供商会去实现线程的硬件专用版本。这些线程的实现彼此会有很大的差异,所以会使得程序员开发可移植的线程应用程序非常困难;
为了充分利用线程的特性,我们需要一个标准的线程编程接口;
POSIX标准在不停的进化和修改,包括Pthreads的规范。它的最新版本是IEEE Std 1003.1,2004版本;
Pthreads库被定义为一系列的C语言程序类型和过程调用,是用一个pthreads.h的include头文件和一个线程库(尽管这个库是另一个库的一部分,就像libc一样)来实现的。
阅读全文
摘要:为什么要用线程?
与标准 fork()相比,线程带来的开销很小。内核无需单独复制进程的内存空间或文件描述符等等。这就节省了大量的CPU时间,使得线程创建比新进程创建快上十到一百倍。因为这一点,可以大量使用线程而无需太过于担心带来的CPU 或内存不足。使用 fork() 时导致的大量 CPU占用也不复存在。这表示只要在程序中有意义,通常就可以创建线程。
当然,和进程一样,线程将利用多CPU。如果软件是针对多处理器系统设计的,这就真的是一大特性(如果软件是开放源码,则最终可能在不少平台上运行)。特定类型线程程序(尤其是CPU密集型程序)的性能将随系统中处理器的数目几乎线性地提高。如果正在编写CPU非常密集型的程序,则绝对想设法在代码中使用多线程。一旦掌握了线程编码,无需使用繁琐的IPC和其它复杂的通信机制,就能够以全新和创造性的方法解决编码难题。所有这些特性配合在一起使得多线程编程更有趣、快速和灵活。
阅读全文
摘要:线程连接(joining)和分离(detaching)函数:
* pthread_join(threadid,status)
* pthread_detach(threadid,status)
* pthread_attr_setdetachstate(attr,detachstate)
* pthread_attr_getdetachstate(attr,detachstate)
阅读全文
摘要:创建线程
1. 起初,主程序main()包含了一个唯一的默认线程。程序员必须明确创建所有其它线程;
2. pthread_create创建一个新的线程并使其执行,这个过程可以在你的代码里的任何地方调用多次;
3. 一个进程可以创建的线程的最大数量是依赖于实现的(The maximum number of threads that may be created by a process is implementation dependent. )。
4. 线程一旦被创建,他们都是同等的,并且也可以创建其它线程。它们之间没有层次体系和依赖关系。
终止线程
1. 一个线程有几种终止的方法:
2. 线程从它的起始程序中返回;
* 线程调用了pthread_exit()函数;
* 线程被另一个线程调用pthread_cancel()函数所取消;
* 整个进程由于调用了exec或exit而退出。
3. pthread_exit经常被用来明确的退出一个线程。通常,pthread
阅读全文

浙公网安备 33010602011771号