Linux C/C++ 并发下的技术方案(互斥锁、自旋锁、原子操作)

前言

线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程,但轻量进程更多指内核线程,而把用户线程称为线程。

一、为什么要使用锁?

下面是一个主线程count计数的方案,分别通过它的10个子线程进行count的自增。

mkdir LOCK	//创建LOCK文件夹

cd LOCK		//转到LOCK目录下

touch Lock.c	//创建Lock.c文件

gcc -o lock Lock.c -lpthread//编译的时候需要用pthread动态库

然后这里是Lock.c的代码

#include<stdio.h>
#include<pthread.h>

#define THREAD_COUNT   10


void* thread_callback(void* arg) {

	int* pcount = (int*)arg;
	int i = 0;
	while (i++ < 1000000) {
		(*pcount)++;
		usleep(1);
	}

}




int main() {

	pthread_t threadid[THREAD_COUNT] = { 0 };
	int i = 0;
	int count = 0;
	for (i = 0; i < THREAD_COUNT; i++) {
		pthread_create(&threadid[i], NULL, thread_callback, &count);//创建线程(线程id,线程属性,线程入口函数,主线程往子线程传的参数)
	}

	for (i = 0; i < 100; i++) {
		printf("count: %d\n", count);
		sleep(1);
	}

	
	getchar();
}

因为电脑配置不同,所以CPU的处理不同。

如果每个子线程使count自增10万次

最后count值可能等于100万(或者小于100w),

由于我的电脑每个子线程使count自增100万次,才会小于1000万,所以我以每个子线程自增100万次作为演示。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值