Tag:

无锁multithreading编程是否更容易?

我只是阅读了一些关于这个主题的内容,但似乎唯一的好处是绕过争用问题,但它不会对死锁问题产生任何重要影响,因为无锁的代码是如此之小和基本(fifos,生命,哈希),从来没有死锁问题。 所以关于性能 – 这是对的吗?

无锁队列

我也在做一个c实现,目前有队列的结构: typedef struct queueelem { queuedata_t data; struct queueelem *next; } queueelem_t; typedef struct queue { int capacity; int size; queueelem_t *head; queueelem_t *tail; } queue_t; queue_t * queue_init(int capacity) { queue_t *q = (queue_t *) malloc(sizeof(queue_t)); q->head = q->tail = NULL; q->size = 0; q->capacity = capacity; return q; } int CompareAndExchange (void **a, […]

用户空间中的内存障碍? (Linux,x86-64)

在内核端很容易设置内存障碍:由于Linux内核头文件,宏mb,wmb,rmb等总是存在。 如何在用户端完成此操作?

如何保证64位写入是primefaces的?

什么时候可以保证64位写入是primefaces的,在基于Intel x86的平台上用C编程时(特别是使用英特尔编译器运行MacOSX 10.4的基于Intel的Mac)? 例如: unsigned long long int y; y = 0xfedcba87654321ULL; /* … a bunch of other time-consuming stuff happens… */ y = 0x12345678abcdefULL; 如果另一个线程在y的第一次赋值完成后检查y的值,我想确保它看到值0xfedcba87654321或值0x12345678abcdef,而不是它们的某些混合。 我想这样做没有任何锁定,如果可能的话没有任何额外的代码。 我希望,当在支持64位代码(MacOSX 10.4)的操作系统上使用64位编译器(64位Intel编译器)时,这些64位写入将是primefaces的。 这总是如此吗?

C中的任何单用户单生产者无锁队列实现?

我正在编写一个带有消费者线程和生产者线程的程序,现在看来队列同步在程序中是一个很大的开销,我找了一些无锁队列实现,但只发现了Lamport的版本和PPoPP的改进版本’ 08: enqueue_nonblock(data) { if (NULL != buffer[head]) { return EWOULDBLOCK; } buffer[head] = data; head = NEXT(head); return 0; } dequeue_nonblock(data) { data = buffer[tail]; if (NULL == data) { return EWOULDBLOCK; } buffer[tail] = NULL; tail = NEXT(tail); return 0; } 两个版本都需要为数据预先分配的数组,我的问题是,是否存在使用malloc()动态分配空间的任何单用户单生产者无锁队列实现? 另一个相关问题是,如何测量队列同步中的确切开销? 比如pthread_mutex_lock()需要多长时间等。