场景
假设存在这样一个情况:需要N个线程对一个全局的变量进行M次递增操作。首先想到的常常是,使用互斥量。当然在“无锁”的世界里,还有其它实现方式。话不多说,看代码:
测试代码
gcc_sync_test.c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define TEST_ROUND 20000
#define THREAD_NUM 10
#define SYNC
#define LOCKLESS
#ifndef LOCKLESS
pthread_mutex_t mutex_lock;
#endif
static volatile int count = 0;
void *test_func(void *arg)
{
int i = 0;
for(i = 0; i < TEST_ROUND; i++){
#ifdef SYNC
#ifdef LOCKLESS
__sync_fetch_and_add(&count, 1);
#else
pthread_mutex_lock(&mutex_lock);
count++;
pthread_mutex_unlock(&mutex_lock);
#endif
#else
count++;
#endif
}
return NULL;
}
int main(int argc, const char *argv[])
{
pthread_t thread_ids[THREAD_NUM];
int i = 0;
#ifndef LOCKLESS
pthread_mutex_init(&mutex_lock, NULL);
#endif
for(i = 0; i < siz