多线程编程
谢白羽
无论东西
展开
-
线程的对象
文章目录模板单例类day18语句块控制局部对象的声明周期原创 2021-06-12 12:34:48 · 117 阅读 · 0 评论 -
77-Windows下原生API 用IOCP编写一个简易的服务器模型 1_recv
文章目录1.main.cpp2.server.cpp3.server.h1.main.cpp#include <cassert>#include <signal.h>#include <thread> //这个服务器是多线程版本#include <map>#include <time.h>#include <string>#include "Server.h"#pragma comment(lib,"Ws2_32原创 2021-06-03 17:40:38 · 176 阅读 · 0 评论 -
76-多线程编程,thread的间的交互 4_recv
1.介绍condition_variable,只是一种通讯的方法,配合mutex就能安全传输某种信号,告诉其他线程条件满足#include <condition_variable.>全局变量2.main函数流程1)程序启动后,塞一堆东西到global这个list里面去,2)线程启动开始往下面跑3)ready = true4) 主线程在往globalList里插进去字符串,每对globalList改变后,再用cv.notify_one()通知一下(唤醒一个线程)5)判断globa原创 2021-06-03 13:31:56 · 153 阅读 · 0 评论 -
74-多线程编程,thread的间的交互 2_recv
单线程转换成多线程会不会快一些,如果不够快,怎样会更快点time ./执行程序 计算cpu时间和占有率,还有实际跑完的时间容器都是线程不安全的多线程要比单线程慢,使用锁太密集了改进-》要加入容器才加锁频繁的加锁放锁造成慢的情况...原创 2021-06-03 00:51:14 · 76 阅读 · 0 评论 -
73-多线程编程,thread的间的交互 1 线程等待的情况
文章目录1.线程在等待下面的一些情况举例当有socket过来,ready才会由false改为true;否则一致在死循环2.线程启动顺序是乱的3.多线程的std::cout<<需要加锁,等价于std::cout.operator<<(i)和std::cout.operator<<(“info”);若使用printf(线程安全的)不需要加锁4.std::this_thread::yield释放CPU没什么作用,其他线程抢到了,但抢到的线程还是死循环5.改成过原创 2021-06-03 00:01:00 · 111 阅读 · 0 评论 -
72-多线程编程,thread的两种“死法”_recv
文章目录1.thread的默认析构函数为abort系统调用2.thread有两种回收行为,需要程序员去显示的辨别这种行为:1)主线主动创建主动回收2)生成线程扔那不管,等线程自己的代码执行完毕,自己回收,用detach()(**比整个程序声明周期短**)1.thread的默认析构函数为abort系统调用只打印了hello,world都没有来得及调用2.thread有两种回收行为,需要程序员去显示的辨别这种行为:1)主线主动创建主动回收2)生成线程扔那不管,等线程自己的代码执行完毕,自己回收,用原创 2021-06-02 23:39:58 · 305 阅读 · 0 评论 -
多线程编程 71 C++11中提供的多线程lock
文章目录1.叫做std::lock_guard1.更灵活2.处理70多线程编程的局限处,std::lock有优化1)顺便提一下,不好的写法,单线程也会死锁(先比较a和b的地址)原理讲解,当有两个线程同时往对方转钱,会死锁改进先锁地址小的锁,避免了死锁,但是这么写代码会很冗长难看标准库的简易写法:第一句:完全锁住形参的锁,无论传入顺序,只管锁第二和第三句话是解锁:传入锁 ,在析构时解锁...原创 2021-06-02 23:26:17 · 105 阅读 · 0 评论 -
70-多线程编程,(临界区 mutex) 2_recv
1.都改回来原来的非原子值但是cout 不等于 maxCount原创 2021-06-01 17:17:29 · 105 阅读 · 0 评论 -
69-多线程编程,(临界区 mutex)_recv
文章目录1.原子操作的弱点:2.常见的解决方案是mutex3.void lockMutex()和void unlockMutex()的缺点1.原子操作的弱点:当两个不同的变量进行操作的时候,哪怕这两个变量的操作都是原子类型的也没有用,分别访问两个变量,结果也是错误的函数定义:函数使用:2.常见的解决方案是mutex1)#include <mutex.> 不容易出错2)一般用mutex都是用引用的方式使用它std::mutex m_mutex;3) 函数定义用法:c.原创 2021-06-01 14:25:22 · 106 阅读 · 0 评论 -
68-多线程编程,(thread 和原子操作变量类型)_recv
1.日志打印问题当调用fstream时,会调用操作系统的东西打开一个文件,得到当前文件的指针头,在操作系统的缓存中写入,两个指针的指针头指向的位置是一样的,执行析构函数时就覆盖掉了,因为指针头是一样的调用flush()会调用指针头直接往里面写2.线程之间需要同步信息在这个题目counter必须共享方法:原子操作#include<atomic.>但是有局限性:很难用的很好m_count.fetch_add(1, ); 等同于 m_count++,第二个餐宿一般用memory_o原创 2021-06-01 00:55:36 · 109 阅读 · 0 评论 -
多线程编程1- 解决贡献变量普遍方法和硬要触发共享变量的问题提出
文章目录1.做一些措施解决共享变量的问题1)共享的值加起来,使用不同的Counter对象和不同的计算totalvalue2)效果展示3)如果没有必要,线程间不要共享资源<-极力推荐2.定义线程做事的流程1)法一:=表示值的拷贝2)法二:直接传函数,效率更高3)计算结果 : 用值拷贝的方法计算,4) 引用计算更快:std::cref(),用引用的方式传入参数5)引入共享变量就卡住...原创 2021-05-31 00:43:21 · 127 阅读 · 0 评论 -
多线程编程1-多线程的坑
文章目录多线程的坑1)单线程做计算特别快2)用多线程(3个线程)去做,增加辅助类3) 共享变量:多线程的坑1)单线程做计算特别快结果瞬间出来2)用多线程(3个线程)去做,增加辅助类3) 共享变量:1)在每个线程跑的时候,如果有共享变量的时候,更改的顺序有可能是不固定的,这里有两个共享变量(counter2和totalValue)2)线程的m_count++会先写如寄存器,寄存器加1写入内存,这就分成了3步3)所以共享变量需要保护...原创 2021-05-30 23:55:57 · 162 阅读 · 0 评论 -
多线程编程1-多线程编程-一种简单的应用,divide and conquer_recv
文章目录1.线程同步计算和异步计算1)代码1)实现同步和异步的演示2)区分主线程还是其他的线程--id3)thread的id作为一个key放在map里面2)执行效果1)实现同步和异步的演示的效果2)区分主线程还是其他的线程的效果3)thread的id作为一个key放在map里面,测试速度1.线程同步计算和异步计算1)代码1)实现同步和异步的演示#include <iostream>#include <thread>#include <future>#incl原创 2021-05-29 16:54:28 · 117 阅读 · 0 评论 -
多线程编程1-多线程编程简介
为什么用多线程来做服务器?1)当前机器的单核红利已经结束了linux下的进程:process(linux for windows CreateProcess,会产生信号)线程: thread (POSIX threads)(涉及到数据计算和数据I/O,一般服务器的瓶颈:①数据处理有问题,处理数据太慢,没法及时发送给客户端②算法太挫,速度太慢,即使请求响应太慢要在数据I/O和计算找到平衡点)2)多线程拥有自身的优势新时代的multithread goto , 可能的问题包括:原创 2021-05-29 14:22:35 · 212 阅读 · 0 评论