线程的同步与互斥
相关背景概念
- 临界区 :每个线程内部访问自己资源的代码叫做临界区:
- 临界资源 :多个执行流共享的资源叫做临界资源
- 互斥 :在任何时刻,只能有且仅有一个执行流访问临界区的临界资源
- 原子性 :一个操作不会被任何调度机制打断,要么完成,要么没完成,只有两种状态,常见的++,–都不是原子操作,因为汇编代码不止一条
互斥量mutex
- 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量。
- 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。
- 多个线程并发的操作共享变量,会带来一些问题。
我们模拟实现抢票系统说明:
#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
using namespace std;
int tickets = 100; //临界资源
void* route(void* arg)
{
char* id = (char*)arg;
while(1)
{
if(tickets>0)
{
usleep(10000);
fflush(stdout);
cout<<
本文介绍了Linux中的线程同步与互斥,通过模拟抢票系统来阐述问题。分析了临界区、临界资源、互斥和原子性的概念,并详细讨论了互斥量(mutex)的使用,包括初始化、销毁以及加锁解锁操作。最后,通过修复抢票系统的代码,展示了如何应用互斥量解决并发访问共享资源的问题。
最低0.47元/天 解锁文章
623

被折叠的 条评论
为什么被折叠?



