自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 c++ coroutine+lambda注意问题

代码如下:struct no_block_task{ struct promise_type { auto initial_suspend() noexcept { return std::experimental::suspend_never(); } auto final_suspend() noexcept { return std::experimental::suspend_never(); } void unhandled_exception() { std:

2020-11-21 16:55:39 110

原创 自旋锁实现问题

不关抢占的自旋锁假设A线程获得锁后,此时存在B线程并且B线程优先级高,A线程被抢占挂起,B线程尝试访问相同的临界资源,B线程就可能会陷入活锁状态,不断尝试获得锁、失败、尝试获得锁、失败…不关中断的自旋锁假设CPU是单核的,进程获得了锁并访问临界资源,此时被中断,接着执行中断例程,单中断例程也范围相同的临界资源,此时进程就会陷入活锁状态无优先级自旋锁如果CPU处理器很多,就可能出现某些线程一直获取不到锁的情况FIFO的自旋锁排队自旋锁struct spin_lock{ uint32_t

2020-11-19 11:15:23 153

原创 有返回值的函数函数结尾没返回值在clang+llvm下的异常

以下代码用clang++编译#include <stdio.h>int func(){ printf("");}int main(){ func(); return 0;}接着用GDB调试程序,输入r运行程序,出现Program received signal SIGILL, Illegal instruction.执行display /i $pc,发现程序因为执行ud2指令而异常终结。=> 0x4011c5 <_Z4funcv+21>:

2020-11-18 17:41:14 152

原创 GDB调试二

GDB调试一catchpointscatch event 生成一个断点,当event发生时,停止程序运行。event可以是以下命令之一:throw [regexp]rethrow [regexp]catch [regexp]捕捉C++异常,当异常名跟正则表达式regexp匹配时,程序停止运行。exec当调用exec家族函数时,程序停止运行fork当调用fork函数时,程序停止运行vfork当调用vfork函数时,程序停止运行load [regexp]unlo

2020-10-27 11:10:41 41

原创 GRPC-http2

GRPC-http2Chttp2Connector与Chttp2ServerListener客户端通过Chttp2Connector::Connect与服务器发起tcp连接请求,连上后客户端与服务端进行握手(根据用户传入参数判断是否进行tls握手,开启后进行非对称加密的密文交互,最终双方获得一致的对称加密密钥)。握手完成后调用Chttp2Connector::OnHandshakeDone,创建grpc_transport对象,并调用grpc_chttp2_transport_start_reading

2020-10-25 21:02:29 222

原创 GDB调试一

GDB调试一breakpointsbreakpoints可以用break命令设置,内置变量bpnum记录了当前设置的断点号;每次设置断点时,GDB会赋当前最大max_breakpoint_num+1给bpnum记录了当前设置的断点号;每次设置断点时,GDB会赋当前最大max\_breakpoint\_num+1给bpnum记录了当前设置的断点号;每次设置断点时,GDB会赋当前最大max_breakpoint_num+1给bpnum。infos breakpoints可以查看所有的断点。break

2020-10-23 17:40:46 48

原创 一个无锁队列

在github上,发现一个非阻塞多消费者多生产者无锁队列,基于c++11实现,并且只有一个头文件,而这个头文件只有200多行代码。alignas、false sharing和true sharingalignas是c++11的一个关键字,用于内存字节对齐。false sharing,简单来说就是当两个成员变量在同一个cache line时,其中一个成员变量被修改,会导致cache line无效,另一个成员变量就没法享受cache带来的好处了。所以有时候要避免false sharing。true sh

2020-10-09 11:31:11 365

原创 GRPC浅析-LockfreeEvent

LockfreeEvent是一个无锁事件类。主要用于epoll模型下读、写和错误事件的触发。void LockfreeEvent::NotifyOn(grpc_closure* closure) { /*cas失败时,再次循环重试*/ while (true) { /* 这里用acquire的原因是,当SetShutdown成功时,会将shutdown_err保存在state_中, * 假设这边检测到状态是已关闭情况,则下面代码会使用到shutdown_err, * 为

2020-10-08 11:07:42 230

原创 GRPC浅析-epoll与IOCP

GRPC浅析-epollepoll是什么epoll是什么epoll是Linux内核一种I/O事件通知机制,可将大量的文件描述符与事件注册到epoll实例上。内部使用红黑树管理文件描述符与事件。

2020-09-28 15:44:34 402

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除