Linux多线程编程——线程的同步与互斥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux多线程编程——线程的同步与互斥相关的知识,希望对你有一定的参考价值。

前言:无论是多线程编程还是多进程编程,控制好不同线程或不同进程之间同步和互斥问题是非常有必要的。同步是多个进程或线程共同完成某个任务,举例说,一个缓冲区的生产者和消费者问题,当生产者生产了一个商品时,等待的消费者就获得了一个消息知道可以去取走商品了,当消费者取走一个商品后,生产者就知道可以继续生产一个商品了,这是同步问题,所谓互斥问题,是指某个共享资源在一次操作中,只能被一个线程或进程占有,其他的线程或进程不能对它进行操作,比如对一个共享内存的读写操作,当一个进程对它写的时候,另一个进程就不能对它读,不然有可能造成数据不一致。

 互斥量

互斥量相当与锁,在使用共享资源时,对它加锁,使用完后,释放锁,在加锁期间,其他的线程不能对该共享资源进行操作

数据类型:pthread_mutex_t

相关API

初始化和销毁互斥量

int pthread_mutex_init(pthread_mutext_t *restrict mutex, const pthread_mutexattr_t *restrict attr); //attr设置为NULL,代表以默认属性初始化互斥量

int pthread_mutex_destroy(pthread_mutex_t *mutex);

加锁

int pthread_mutex_lock(pthread_mutex_t *mutex); //对互斥量加锁,若互斥量已加锁,则会阻塞,直到信号量解锁,成功返回0,

int pthread_mutex_trylock(pthread_mutex_t *mutex);//如果信号量没被锁,则加锁,并返回0,若信号已被锁,则不会阻塞,返回一个非0值

int pthread_mutex_unlock(pthread_mutex_t *mutex);//解锁

以上是关于Linux多线程编程——线程的同步与互斥的主要内容,如果未能解决你的问题,请参考以下文章

多线程编程之Linux环境下的多线程

Linux系统编程 多线程

Linux系统编程 多线程

Linux多线程编程

多线程并发编程

linux下多线程编程