一、(LINUX 线程同步) 引入
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,原创水平有限有误请指出线程相比进程有着先天的数据共享的优势,如下图,线程共享了进程除栈区以外的所有内存区域如下图所示:但是这种共享有时候也会带来问题,简单的考虑如下C++代码:点击(此处)折叠或打开{
千家信息网最后更新 2024年11月30日一、(LINUX 线程同步) 引入原创水平有限有误请指出
线程相比进程有着先天的数据共享的优势,如下图,线程共享了进程除栈区以外的所有内存区域如下图所示:
但是这种共享有时候也会带来问题,简单的考虑如下C++代码:
就是临界区代码
后面将对他们进行描述,这里我们简单实用静态互斥锁进行解决这个问题。
临界区的选择应该尽量小,避免对多线程的并发性产生较大的性能影响
具体代码如下:
注意:一个简单类型的i++也不一定是一个原子操作,所以在涉及到并发修改共享变量的时候一定要使用
线程同步手段。
作者微信:
线程相比进程有着先天的数据共享的优势,如下图,线程共享了进程除栈区以外的所有内存区域如下图所示:
但是这种共享有时候也会带来问题,简单的考虑如下C++代码:
点击(此处)折叠或打开
- {
- int b = 0;
- b = a;
- a = b+1;
- return *this;
- }
就是临界区代码
后面将对他们进行描述,这里我们简单实用静态互斥锁进行解决这个问题。
点击(此处)折叠或打开
- //原子操作 加锁
- pthread_mutex_lock(&mtx);
- ++test;
- pthread_mutex_unlock(&mtx);
- //原子操作 解锁
- cout<<pthread_self() <<":";
- test.prit()
临界区的选择应该尽量小,避免对多线程的并发性产生较大的性能影响
具体代码如下:
点击(此处)折叠或打开
- /*************************************************************************
- > File Name: error.cpp
- > Author: gaopeng QQ:22389860 all right reserved
- > Mail: gaopp_200217@163.com
- > Created Time: Mon 15 May 2017 12:01:33 AM CST
- ************************************************************************/
- #include<iostream>
- #include <pthread.h>
- #include <string.h>
- #define MAXOUT 1000000
- using namespace std;
- static pthread_mutex_t mtx=PTHREAD_MUTEX_INITIALIZER;
- class testc
- {
- private:
- int a;
- public:
- testc()
- {
- a = 1;
- }
- testc& operator++()
- {
- int b = 0;
- b = a;
- a = b+1;
- return *this;
- }
- void prit()
- {
- cout<<a<<endl;
- }
- };
- testc test = test;
- void* testp(void* arg)
- {
- int i = MAXOUT;
- while(i--)
- {
- //原子操作 加锁
- pthread_mutex_lock(&mtx);
- ++test;
- pthread_mutex_unlock(&mtx);
- //原子操作 解锁
- cout<<pthread_self() <<":";
- test.prit();
- }
- }
- int main(void)
- {
- pthread_t tid[3];
- int er;
- int i = 0;
- while(i<3)
- {
- if ((er = pthread_create(tid+i,NULL,testp,NULL) )!=0 )
- {
- strerror(er);
- return -1;
- }
- i++;
- }
- i = 0;
- while(i<3)
- {
- pthread_join(*(tid+i),NULL);
- i++;
- }
- cout<<"last numer: ";
- test.prit();
- }
注意:一个简单类型的i++也不一定是一个原子操作,所以在涉及到并发修改共享变量的时候一定要使用
线程同步手段。
作者微信:
原子
线程
代码
就是
进程
问题
同步
实用
较大
优势
作者
先天
内存
区域
变量
实际
实际上
将对
性能
手段
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
甲骨文公司数据库事业部
查阅文献的数据库
创腾网络安全
软件开发奖惩制度怎么制定模板
怎么把电脑接入数据库
新闻与网络安全学院
网络安全意识培训报名
数据库冗灾
网络安全学完工资能拿多少
北京经开互联网科技有限公司
郑爽 软件开发
数据库的用户从哪里找
云房数据库
宜良上门软件开发市场报价
江苏大容量服务器高性价比
软件开发产品推介
mdb 数据库 文件恢复
服务器管理华为惠普
软件开发个体工商户怎么取名
职称论文数据库官网
国投安信期货软件服务器连接失败
婴幼儿教育app软件开发
湖南债权管理软件开发公司
服务器关闭安全组
佳格数据库
万网数据库在哪里
开展网络安全保障工作专项会议
用友U8 数据库期初余额
mdb 数据库 文件恢复
泰安市好的软件开发