前言
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在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();
}
因为电脑配置不同,

本文介绍了在Linux环境下,为解决多线程并发问题,如何利用互斥锁、自旋锁和原子操作确保线程安全。通过一个计数器的例子,展示了未加锁时可能出现的数据不一致问题,并提供了相应的解决方案。同时,对比了三种方法的适用场景:自旋锁适用于锁保护的数据访问时间短,互斥锁适合保护较大数据块,而原子操作能将多条指令合并确保其完整性。
最低0.47元/天 解锁文章
1849

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



