之前提到了QNX上的线程创建方法,现在进一步学习QNX上多线程的同步。曾经编写过多线程应用的同学们都知道线程之间的同步在多线程环境中特别重要,线程之间如果没有同步好,经常会出现逻辑错误。
有关QNX线程同步在QNX官方文档《QNX Neutrino Programmer’s Guide》和《Getting Started with QNX Neutrino》中都有详细的讲述,同学们可以从中学习相关的理论知识。不过,文档中的描述总是比较抽象,不如直接看样例来的简单。
在QNX Momentics环境中提供了使用Mutex同步线程的样例,同学们通过“File -> New -> Examples... ->QNX Neutrino Example -> QNX Example Neutrino Mutex Project”可以导入样例并测试。下面就根据这个样例分析一下QNX多线程同步中Mutex的使用。
线程之间之所以要同步,是因为不同线程可能会访问同一资源。如果两个线程各自使用自己的资源,就不会有线程同步的问题了。在QNX环境中,定义的全局变量是各线程共用的,线程方法内定义的变量是私有的。当不同线程要访问同一个全局变量时,就需要考虑线程同步的问题了。
我们从QNX Momentics的Mutex样例中可以看到两个变量的定义:firstname和lastname。两个变量都定义在具体方法外,属于全局变量。
#include <stdlib.h>
#include <stdio.h>
//…
char *firstname;
char *lastname;
int main(