Linux多线程C++版(六) 线程同步和互斥 ——ATM机取钱案例 1.线程同步和线程互斥 线程同步线程同步是一个宏观概念,在微观上包含线程的相互排斥和线程先后执行的约束问题。解决同步方式条件变量线程信号量线程互斥线程执行是相互排斥解决互斥方式互斥锁读写锁线程信号量 2.线程互斥案例—ATM取钱–没有使用互斥锁 头文件 account.h 功能文件account.c 执行文件 account_test.c 程序输出结果:
girl和boy都从银行账户10001中取出了10000,所以产生了错误。 3.线程互斥—-互斥锁(互斥量) 互斥锁是一种简单的加锁的方法,来控制对共享资源的访问。在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行访问。若其他线程希望上锁一个已经被上了互斥锁的资源,则该线程挂起,直到上锁的线程释放互斥锁为止。互斥锁数据类型pthread_mutex_t 4.互斥锁创建和销毁 参数mutex :互斥锁mutexattr:互斥锁创建方式 或者可以传入锁的属性后面会有PTHREAD_MUTEX_INITIALIZER(默认) 创建快速互斥锁 第一次上锁成功,第二次上锁会阻塞PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP 创建递归互斥锁 第一次上锁成功,第二次以后上锁还是成功,内部计数PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP 创建检错互斥锁 第一次上锁成功,第二次上锁会出错 5.互斥锁上锁和解锁 参数mutex :互斥锁 6.线程互斥案例—ATM取钱–使用互斥锁 头文件 account.h 功能文件account.c 执行文件 account_test.c 程序运行结果:
7.互斥锁属性创建和销毁 参数attr:互斥锁属性定义 8.互斥锁属性之一—进程共享属性操作 参数attr:互斥锁属性pshared:进程共享属性PTHREAD_PROCESS_PRIVATE(默认情况) 锁只能用于一个进程内部的两个进程进行互斥PTHREAD_PROCESS_SHARED 锁可以用于两个不同进程中的线程进行互斥 9.互斥锁属性之一—-互斥锁类型操作 参数attr:互斥锁属性type:互斥锁类型标准互斥锁:PTHREAD_MUTEX_NORMAL 第一次上锁成功,第二次上锁会阻塞递归互斥锁:PTHREAD_MUTEX_RECURSIVE 第一次上锁成功,第二次以后上锁还是成功,内部计数检错互斥锁:PTHREAD_MUTEX_ERRORCHECK 第一次上锁成功,第二次上锁会出错默认互斥锁:PTHREAD_MUTEX_DEFAULT(同标准互斥锁) 10.代码了解互斥锁属性 程序运行结果: 选择normal,锁的类型是普通型,第一次上锁成功,第二次失败,程序阻塞 选择recursive,锁的类型是递归性,第一次上锁成功, 第二次也成功,只是内部计数。 选择error,锁的类型是检错型,第一次上锁成功,第二次失败,程序报错
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/45793.html