cost 312 ms
将节点交换为升序 - Swapping Nodes into Ascending Order

我有一个方法可以将元素添加到双向链表中,如果第一个元素大于第二个元素,则将元素按升序交换。 如果我输入 23、24、16,它会跳过交换 23 和 24,因为它们很好,然后它会交换 23 和 16。 然后,当它返回到for循环时,我得到一个错误,指出first.getNext()是 null。我可以看 ...

Unsafe库是如何帮助原子变量实现线程安全的? - How does Unsafe library help atomic variables to achieve thread safety?

我一直在阅读 web 篇关于比较和交换 (CAS) 如何在幕后工作的文章。 由于AtomicInteger、AtomicLong等原子变量都使用了JNI的“Unsafe”库的compareAndSet()方法,但是当你go实际实现时,你会得到下面一个空白的类抽象方法,它并没有告诉你compareA ...

原子递增并分配给另一个原子 - Atomically increment and assign to another atomic

假设我有一些全局的: 和许多线程,每个线程都可以访问 可以在线程之间共享。 我想以连续的方式将空闲块分配给子偏移量,也就是说,我想原子地执行以下操作: 显然上面的实现是行不通的,因为多个线程可能会进入 if 语句的主体,然后尝试将不同的块分配给child_offset 。 我还考虑了以下内容: 但这 ...

如何通过将最后一位设置为 1 来“标记”指针? - How to "mark" pointers by setting the last bit to 1?

我正在尝试标记和取消标记指针,以便我可以实现非阻塞链表。 我检查了我的体系结构中最后一位从未使用过,所以我试图使用更改它来标记/取消标记指针。 我正在尝试执行 OR 以将最后一位设置为 1,执行 AND 以取消设置它并执行 AND 以检查它是否设置为 1。问题是当我对指针执行按位(注释的宏)操作时 ...

C++:在高位具有 16 位计数器的原子标记指针,似乎无法递增计数器 - C++: Atomic Tagged pointer with 16-bit counter in upper bits, can't seem to increment the counter

为了学习,我正在尝试实现一个原子标记/打包指针。 我想将高 16 位用于uint16_t计数器,将低 3 位用于 3 位标签。 到目前为止,除了增加计数器的能力外,我已经设法让所有的东西都工作了。 我对按位运算不是很熟悉,所以我认为错误可能出在我使用它们的某个地方。 我的实现如下: (神栓链接: ...

为什么在我的代码中 cpp compare_exchange_strong 更新并返回 false - Why in my code cpp compare_exchange_strong updates and return false

问题: 所以我对 CPP 很陌生,我试图使用一些原子性概念来实现一个简单的比较代码。 问题是我没有得到想要的结果,即:即使在 compare_exchange_strong function 更新原子变量 ( std::atomic ) 的值之后,它仍返回 false。 下面是程序代码: CP: ...

与现代计算机中的全局变量进行比较和交换的原子性如何? - How atomic is Compare and Swap against global variable in modern computer?

假设我们使用 C++ 等现代编程语言实现。 假设我们有 5 个线程 t1 到 t5,我们还有一个时间戳数组 TS[5],每个线程都有一个。 我们还有一个全局时间戳 GT,它会随着进程的运行而逐渐增加。 所以现在五个线程 tx 中的每一个都将 TS[x] 的本地副本作为 local_ts 并尝试对其 ...

Compare And Swap 和 Compare And Set 操作有什么区别? - What is the difference between the Compare And Swap and the Compare And Set operations?

试图理解简单称为 CAS 的比较和交换操作,我发现它有一个称为比较和设置的变体。 它们的工作方式相同,但回报不同。 比较和交换返回一个值,但比较和设置返回一个 boolean。 我的问题是他们是否在低级上使用了相同的比较和交换(CMPXCHG for x86)指令。 它们都是由 Java 中的原子 ...

Golang 中的并发与并行 - Concurrency vs parallelism in Golang

我正在尝试在 Golang 和 Rust 中实现双重比较和交换(可能还有 MWCAS),并且由于没有 CPU 支持该指令,我需要找到一种使用该语言为我提供的方法。 让我们看一下这段代码: 一般来说这是错误的,但如果我们调用HttpServer(1)它会按预期工作:假设我调用端点 1000 次,我将在 ...

为什么 Semaphore 实现使用 CAS (U.compareAndSetInt) 而不是等待/通知? - Why the Semaphore implementation uses CAS (U.compareAndSetInt) instead of wait/notify?

我决定从头开始实现并发 package 的一些类,并通过等待/通知实现信号量。 这样做似乎非常容易和直观。 当我检查构建实现时,我看到他们使用 CAS(比较和交换)技术使这一切变得复杂。 他们为 ReentranceLock 实现做了同样的事情。 为什么他们决定这样做? 是因为性能吗? 也许我也应 ...

Java 8 实现比较和交换(不是比较和设置!) - Java 8 impl on Compare And Exchange (Not Compare and Set!)

在 java 17 中, AtomicReference具有类似于compareAndSet的compareAndExchange方法,但它不是返回 boolean,而是返回原子操作之前的值。 我需要它来实现自定义并发结构。 由于项目的限制,我只能使用 Java 8 个特性。 一些挖掘发现VarH ...

CUDA 为浮点类型(如双精度)定制 atomicCAS - CUDA customized atomicCAS for floating point types (like double)

atomicCAS允许使用各种长度的整数类型(根据 16/32/64 位的规格字长)。 它适用于整数类型,如int , unsigned long long ,... 我想对相同长度的非整数类型使用原子操作。 我天真的想法是将数据简单地类型转换为长度相同的整数类型,例如double到uint64 ...

如何在金属着色器中实现锁定和解锁序列? - How to implement a lock and unlock sequence in a metal shader?

我应该如何使用金属计算着色器通过比较和交换来实现锁定/解锁序列。 我已经测试了这个示例代码,但它似乎不起作用。 由于某种原因,线程没有检测到锁已被释放。 以下是对以下代码的简要说明: depthFlag 是 atomic_bools 的数组。 在这个简单的示例中,我只是尝试通过比较 dept ...

使用 java 客户端(5.1.5.1)通过操作命令的原子增量失败 - Atomic increment via operate command using java client (5.1.5.1) fails

我正在尝试对单个 bin 集进行原子操作。 但是我注意到一个奇怪的行为,随机记录没有增加/减少。 操作命令返回 null 作为响应。 也没有任何异常。 有时它有效,有时无效。 尝试使用持久性和内存存储进行检查。 这是一个 3 个节点的集群环境。 在某些情况下,它给出了热键错误,我可以通过设置属性 ...

compareAndSwap 一个普通成员(非易失性成员)仍然具有易失性读写的内存语义 - compareAndSwap a common member ( non-volatile member ) still has memory semantics of volatile read and write

当我在 jdk1.8 中阅读AbstractQueuedSynchronizer时,我看到compareAndSetState方法具有易失性读写的内存语义的评论。 注释和代码如下: 在 AbstractQueuedSynchronizer 类中, stateOffset是一个名为state的 ...

是否有与 CUDA 的 atomicCAS 等效的 DPC++/SYCL? - Is there a DPC++/SYCL equivalent of CUDA's atomicCAS?

据我了解,CUDA的atomicCAS有如下定义(这是四个之一) 并将全局共享内存中位于address (在文档old中命名)的值与compare进行原子比较,如果相等,则将值分配给val ,否则什么也不做。 在这两种情况下都返回old 。 查看 SYCL API,我只能找到compare_e ...

这个比较交换函数中的内联汇编是如何工作的? (ARM 上的 %H 修饰符) - How does the inline assembly in this compare-exchange function work? (%H modifier on ARM)

我在 gnu 手册 (extend extended-asm) 中发现 '%H1' 中的 'H' 的意思是'将 8 个字节添加到可偏移的内存引用中'。 但我认为如果我想将双字长数据加载到 oldval(一个 long long 值),它应该在 oldval 的低 32 位作为 oldval 的 ...

我正在尝试参考快速排序实现双 pivot 分区 function。 有人能帮我吗? - i am trying to implement the double pivot partition function in reference to quicksort. Can someone help me?

嗨,我正在尝试实现这个 double pivot function 然后通过三个调用将找到的索引传递给递归快速排序 function (arr, left, pivot_sx) / (arr, pivot_sx + 1, pivot_dx-1) / (arr, pivot_dx + 1,对)。 我 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM