草庐IT

atomic-swap

全部标签

c++ - std::atomic<uint_least8_t> 行为

在一个系统上:typedefunsignedcharuint8_t;typedefunsignedshortuint16_t;std::atomic::is_always_lock_free//=>falsestd::atomic::is_always_lock_free//=>true据我了解,类型std::atomic将是8位并且不是无锁的。如果是这样,如果我想要一个至少8位且始终无锁的原子类型,我应该怎么写?(假设存在这种类型)是否有比以下更好的选择:std::atomic::is_always_lock_free,uint8_t,uint16_t>::type>(为简单起见,我

c++ - 重用 copy-and-swap 习惯用法

我正在尝试将copy-and-swap习惯用法放入可重用的混音中:templatestructcopy_and_swap{Derived&operator=(Derivedcopy){Derived*derived=static_cast(this);derived->swap(copy);return*derived;}};我打算通过CRTP将其混入:structFoo:copy_and_swap{Foo(){std::cout然而,一个简单的测试表明它不起作用:Foox;Fooy;x=y;这只会打印两次“default”,既不会打印“copy”也不会打印“swap”。我在这里缺少什

c++ - 如何正确使用 std::atomic_signal_fence()?

cppreference.com将此函数记录为“线程与在同一线程中执行的信号处理程序之间的栅栏”。但是网上没找到例子。我想知道以下伪代码是否正确说明了std::atomic_signal_fence()的功能:intn=0;SignalObjects;voidthread_1(){s.wait();std::atomic_signal_fence(std::memory_order_acquire);assert(1==n);//neverfires???}voidthread_2(){n=1;s.signal();}intmain(){std::threadt1(thread_1);

【博客558】k8s node为什么需要关闭selinux与swap

k8snode为什么需要关闭selinux与swap1、关闭selinuxcentos关闭方法:setenforce0&&sed-i's/^SELINUX=.*/SELINUX=disabled/'/etc/selinux/configreboot注意查看centos与ubunutu可能不同,而且ubuntu部分发行版本默认就没装selinux,且关闭方式可能与centos不同,视具体情况而定为什么k8s集群需要关闭这个1、selinux安全机制较复杂,可能会与k8s本身的流量机制冲突,因为k8s本身会在netfilter里设置流量规则,也即:iptables规则2、这是允许容器访问主机文件系

c++ - 为什么 std::mutex 比 std::atomic 快?

我想在多线程模式下将对象放入std::vector中。所以我决定比较两种方法:一种使用std::atomic,另一种使用std::mutex。我看到第二种方法比第一种方法更快。为什么?我使用GCC4.8.1,在我的机器(8线程)上,我看到第一个解决方案需要391502微秒,第二个解决方案需要175689微秒。#include#include#include#include#include#includeintmain(intargc,char*argv[]){constsize_tsize=1000000;std::vectorfirst_result(size);std::vecto

c++ - sort() - 没有匹配函数来调用 'swap'

我花了大约一个小时试图弄清楚为什么当我尝试构建以下内容时,我会收到20条类型为“语义问题-没有匹配函数调用'swap'”的错误消息类(在XCode中)。测试.h#include#include#includeclassTest{std::vectorlist;voidrun()const;staticboolalgo(conststd::string&str1,conststd::string&str2);};测试.cpp#include"test.h"voidTest::run()const{std::sort(list.begin(),list.end(),algo);}boolT

[Linux]设置swap分区以及相关问题解决方法总结

一、虚拟内存swap(交换空间)简介        物理内存读写数据比硬盘读写数据要快许多,由于内存是有限的,所以就引出了物理内存和虚拟内存。物理内存是系统硬件提供的内存,是真正的内存;虚拟内存是为了满足物理内存不足时而提出的策略,他是利用磁盘空间虚拟出的逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(swapspace)。        作为物理内存的扩展,linux会在物理内存不足时使用交换空间,内核会将暂时不用的内存块信息写到交换空间,这样物理内存就得到了释放,当需要用到原始信息时会重新从交换空间读入到物理内存中。        交换空间通常是一个磁盘分区,但是也可以是一个文件。如果物理

c++ - 是否可以哄 std::atomic<T> 输出 CMPXCHG16B

对于我对在Windowsx64上使用原子互锁操作不感兴趣的类型,是否可以哄骗std::atomic输出CMPXCHG16B,或者我是否只需要接受它并手动执行原子操作?我可以让GCC/Clang在Linux上执行此操作,所以我怀疑这只是Microsoft标准库的问题。structByte16{int64_ta,b;};std::atomicatm;Byte16a={1,2};atm.compare_exchange_strong(...);//ThishasalockonWindows,notonLinuxversionofcode 最佳答案

windows - 那么,Windows Atom 表的用途是什么?

安全界一直在讨论一种称为“原子轰炸”的新代码注入(inject)技术(参见InjectionAttackDescription和InformationSecurityStackExchangeQuestion)。简单地说,攻击者可以使用原子表来存储可执行代码。一个问题是全局原子表功能存在于所有版本的Windows中,并且是一个有意的功能,而不是一个错误。目前尚不清楚如何通过更改Windows来减轻威胁。Windows原子表的用途是什么?如果微软只是说“就是这样,没有更多的原子表”,会有什么影响? 最佳答案 TL;DR:我个人认为微软

C++ 中的原子变量(std::atomic)使用指南

目录C++中的原子变量(std::atomic)使用指南基本概念使用方法创建原子变量读取值修改值原子操作常见应用场景1.计数器2.控制标志3.链表和数据结构示例代码结论C++中的原子变量(std::atomic)使用指南原子变量(std::atomic)是C++中用于多线程编程的强大工具之一。它们提供了一种线程安全的方式来访问和修改共享数据,而无需使用显式的互斥锁。本文将介绍std::atomic的基本概念、使用方法、常见应用场景以及示例代码,适合入门级读者。基本概念原子变量是一种特殊的数据类型,用于执行原子操作。原子操作是不可分割的操作,可以确保在多线程环境中线程安全地执行。C++中的std