草庐IT

atomic_shared_ptr

全部标签

linux - Linux 上的内存屏障和 atomic_t

最近在看一些Linux内核空间的代码,看到这个uint64_tused;uint64_tblocked;used=atomic64_read(&g_variable->used);//#1barrier();//#2blocked=atomic64_read(&g_variable->blocked);//#3这段代码的语义是什么?它是否确保#1通过#2在#3之前执行。但是我有点困惑,因为#A在64位平台,atomic64_read宏扩展为used=(&g_variable->used)->counter//wherecounterisvolatile.在32位平台上,它被转换为使用锁

linux - Linux 上的内存屏障和 atomic_t

最近在看一些Linux内核空间的代码,看到这个uint64_tused;uint64_tblocked;used=atomic64_read(&g_variable->used);//#1barrier();//#2blocked=atomic64_read(&g_variable->blocked);//#3这段代码的语义是什么?它是否确保#1通过#2在#3之前执行。但是我有点困惑,因为#A在64位平台,atomic64_read宏扩展为used=(&g_variable->used)->counter//wherecounterisvolatile.在32位平台上,它被转换为使用锁

linux - "mov rax, QWORD PTR fs:0x28"汇编指令有什么作用?

这个问题在这里已经有了答案:Whydoesthismemoryaddress%fs:0x28(fs[0x28])havearandomvalue?(3个答案)关闭4年前。紧接执行此指令之前,fs包含0x0。另外我想知道如何从GDB中的这个内存区域读取,该命令是什么?

linux - "mov rax, QWORD PTR fs:0x28"汇编指令有什么作用?

这个问题在这里已经有了答案:Whydoesthismemoryaddress%fs:0x28(fs[0x28])havearandomvalue?(3个答案)关闭4年前。紧接执行此指令之前,fs包含0x0。另外我想知道如何从GDB中的这个内存区域读取,该命令是什么?

linux - GCC 选项的 -shared 和 -Wl,-shared 的区别

我知道-Wl,-shared是ld的一个选项。我见过有人这样编译,$gcc-shared-Wl,-soname,libtest.so-olibtest.so*.o还有这样的人$gcc-Wl,-shared-Wl,-soname,libtest.so-olibtest.so*.o所以,我想知道-shared和-Wl,-shared之间是否有区别。谢谢。 最佳答案 将-shared传递给gcc或将-shared传递给ld(通过-Wl).将-shared传递给GCC可能会在链接时启用或禁用其他标志。特别是,可能涉及不同的crt*文件。要获

linux - GCC 选项的 -shared 和 -Wl,-shared 的区别

我知道-Wl,-shared是ld的一个选项。我见过有人这样编译,$gcc-shared-Wl,-soname,libtest.so-olibtest.so*.o还有这样的人$gcc-Wl,-shared-Wl,-soname,libtest.so-olibtest.so*.o所以,我想知道-shared和-Wl,-shared之间是否有区别。谢谢。 最佳答案 将-shared传递给gcc或将-shared传递给ld(通过-Wl).将-shared传递给GCC可能会在链接时启用或禁用其他标志。特别是,可能涉及不同的crt*文件。要获

c - mmap函数中的MAP_SHARED和MAP_PRIVATE有什么区别?

为了好玩而使用mmap,我有以下代码:(..snip..)fd=open("/home/me/straight_a.txt",O_RDONLY);if(fd==-1){perror("open");exit(1);}m=mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_FILE|MAP_PRIVATE,fd,0);if(m==MAP_FAILED){perror("mmap");exit(1);}printf("mis%p\n",m);printf("*m=%c\n",*m);printf("*(m+1)=%c\n",*(m+1));(..snip..)这

c - mmap函数中的MAP_SHARED和MAP_PRIVATE有什么区别?

为了好玩而使用mmap,我有以下代码:(..snip..)fd=open("/home/me/straight_a.txt",O_RDONLY);if(fd==-1){perror("open");exit(1);}m=mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_FILE|MAP_PRIVATE,fd,0);if(m==MAP_FAILED){perror("mmap");exit(1);}printf("mis%p\n",m);printf("*m=%c\n",*m);printf("*(m+1)=%c\n",*(m+1));(..snip..)这

c - 正确使用 volatile sig_atomic_t

根据this站点,可以使用volatilesig_atomic_t类型的变量在信号处理程序中。现在我的问题是,例如下面的代码仍然是原子的,因此不会引入竞争条件吗?假设我们正在使用多核处理器(编辑:运行多线程程序)。是否volatilesig_atomic_t甚至首先为多核系统工作,还是我们应该使用atomic多核系统上用于信号处理程序的C++11(编辑:运行多线程程序)?volatilesig_atomic_ta;staticvoidsignal_handler(intsig,siginfo_t*si,void*unused){intb;................b=...;a=

c - 正确使用 volatile sig_atomic_t

根据this站点,可以使用volatilesig_atomic_t类型的变量在信号处理程序中。现在我的问题是,例如下面的代码仍然是原子的,因此不会引入竞争条件吗?假设我们正在使用多核处理器(编辑:运行多线程程序)。是否volatilesig_atomic_t甚至首先为多核系统工作,还是我们应该使用atomic多核系统上用于信号处理程序的C++11(编辑:运行多线程程序)?volatilesig_atomic_ta;staticvoidsignal_handler(intsig,siginfo_t*si,void*unused){intb;................b=...;a=