Unix环境高级编程学习笔记(八) 线程同步
从上一篇学习笔记中,我们了解到线程的特性,以及该如何创建线程,终止线程,设置线程属性等,今天我们将来看一看多线程模式下的资源竞争问题。
互斥量当某个资源,存在多个线程对它进行访问时,为了维护数据的一致性,我们可以对它加锁,使得同一时间只有一个线程在访问该资源。其中,最常见的锁是互斥量phtread_mutext_t。该结构的初始化有两种方式,分为静态初始化和动态初始化。当该类型的变量被声明为静态全局变量时,我们应该使用宏PTHREAD_MUTEX_INITIALIZER在变量定义的时候对它进行初始化,而如果是利用malloc动态分配的变量,则须利用如下函数进行初始化和销毁(和内存分配没关系):
pthread_once_t initflag = PTHREAD_ONCE_INIT;int pthread_once(pthread_once_t *initflag, void (*initfn)(void));
该函数用来保证后者只被调用一次,一般用于多线程环境下对全局变量的初始化,其中第一个参数目前只能被设置为PTHREAD_ONCE_INIT宏。