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