不知道自己是为什么总是线程和进程傻傻分不清楚,名字和号对不上
进程,相当于两个程序子分别的运行着
线程,是进程内部的,一个进程中可已包含多个线程,举个例子不知道准确吗
一个程序,依次加1,一直加100,这是一个进程的一个线程
在加到20时,起一个定时器,依次减1,20秒内重复,这个定时器就是同一个进程的另一个线程
这是正常的+1 和定时器的-1 ,都在操作这个数据,就容易出现问题,这时候为了保护数据,就可以考虑添加数据锁。
互斥锁
1、pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
或者 pthread_mutex_t mutex; 定义它
PTHREAD_MUTEX_INITIALIZER
是一个宏定义,用于静态初始化互斥锁(mutex)的属性。在使用 PTHREAD_MUTEX_INITIALIZER
宏定义时,不需要再使用函数进行初始化
2、pthread_mutex_init(&mutex, NULL); 初始化它
3、pthread_mutex_lock(&mutex); 在保护数据前锁住它
4、pthread_mutex_unlock(&mutex); 数据操作完成后解开它
5、pthread_mutex_destroy(&mutex); 用完之后销毁它
注意在加锁解锁之间小心直接返回了,这样就成了只加锁而没有解锁的死锁啦