c - 如何在不使用互斥量的情况下在多个线程之间进行同步,以便它们的事务 ID 是唯一的?

标签 c multithreading

我正在用 C 语言编写一个应用程序,它需要多个线程从一个函数中请求一个唯一的事务 ID,如下所示;

struct list{
  int id;
  struct list *next
};

function generate_id()
{
  linked-list is built here to hold 10 millions 
}

如何在不使用互斥体的情况下在两个或多个线程之间进行同步,以便它们的事务 ID 在它们之间是唯一的,这可能吗?

即使我需要将链接列表更改为其他内容,也请分享任何内容。

最佳答案

让我先猜猜你想做什么(如果我错了请纠正我):

从每个线程调用函数“generate_id”并操作一个全局计数器来为每个链表节点分配唯一的 ID。

在这样做时,您显然需要互斥。除了互斥之外,它还可以通过使用诸如“test-and-test-and-set”或“compare-and-swap”之类的原子操作来实现。

关于c - 如何在不使用互斥量的情况下在多个线程之间进行同步,以便它们的事务 ID 是唯一的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10249727/

相关文章:

c - 从 execlp() 获取返回

c - For循环不执行

java - 多线程会导致静态方法的并发问题吗?

java - 有人说 - "a thread enters an object' s monitor” 是什么意思?

c++ - C:C 中的 volatile 数组

c - 使用指针访问带有数组的两个结构

c - C 中的按位运算符,指的是 8 位数组中的位置

multithreading - Coldfusion 对线程总数的限制

c - 在与原子加载和存储同步的线程之间共享变量是否安全?

c# - 1 System.Timers.Timer = 1 个线程?