如何在多个线程之间进行同步,以便在不使用互斥锁的情况下使其事务ID唯一?

时间:2012-04-12 20:31:40

标签: c multithreading

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

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

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

如何在不使用互斥锁的情况下在两个或多个线程之间进行同步以使其事务ID在其中是唯一的,是否可能?

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

1 个答案:

答案 0 :(得分:0)

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

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

这样做,你显然需要相互排斥。除了互斥之外,它还可以通过使用“test-and-test-and-set”或“compare-and-swap”等原子操作来实现。