我用 LinuxLinux学习之路Linux

c语言多线程同步使用指南(linux)

2019-07-27  本文已影响1人  Dakini_Wind

一、多线程

头文件:
  #include<pthread.h>
函数声明:
  int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
参数依次为:
  指向线程标识符的指针、设置线程属性、线程运行函数的起始地址、传入参数。

食用方法:
指针函数:

void *mythread_function(void *arg)
{
  ...
}

调用代码:

...
#include <pthread.h>
...
pthread_t mythread;
pthread_create(&mythread, NULL, mythread_function, NULL)

注意:

  1. pthread_create第4个传参为向线程传入参数,但因为只能传入一个,所以传参多的时候需要用struct封装一下。
  2. 线程创建成功返回.

二、信号量

头文件:
  #include <semaphore.h>
函数:

三、互斥锁

头文件和线程的相同:
  #include <pthread.h>
使用方法:

互斥锁的类型:
1.PTHREAD_MUTEX_TIMED_NP,这是缺省值,也就是普通锁。当一个线程加锁以后,其余请求锁的线程将形成一个等待队列,并在解锁后按优先级获得锁。这种锁策略保证了资源分配的公平性。
2.PTHREAD_MUTEX_RECURSIVE_NP,嵌套锁,允许同一个线程对同一个锁成功获得多次,并通过多次unlock解锁。如果是不同线程请求,则在加锁线程解锁时重新竞争。
3.PTHREAD_MUTEX_ERRORCHECK_NP,检错锁,如果同一个线程请求同一个锁,则返回EDEADLK,否则与PTHREAD_MUTEX_TIMED_NP类型动作相同。这样就保证当不允许多次加锁时不会出现最简单情况下的死锁。
4.PTHREAD_MUTEX_ADAPTIVE_NP,适应锁,动作最简单的锁类型,仅等待解锁后重新竞争。

上一篇 下一篇

猜你喜欢

热点阅读