多线程并发锁方案—自旋锁

简介: 多线程并发锁方案—自旋锁

多线程并发锁方案(互斥锁)之后。

自旋锁与互斥锁的比较:

image.png

代码的实现与mutex相似:

#include <stdio.h>
#include <pthread.h>
#define THREAD_COUNT  10
pthread_mutex_t mutex;
pthread_spinlock_t spinlock;     //spinlock定义
void *thread_callback(void *arg) {
  int *pcount = (int *)arg;
  int i = 0;
  while (i ++ < 100000) {
#if 0
    (*pcount) ++; //
#elif 0
    pthread_mutex_lock(&mutex);
    (*pcount) ++; //
    pthread_mutex_unlock(&mutex);
#else
    pthread_spin_lock(&spinlock);
    (*pcount) ++; //
    pthread_spin_unlock(&spinlock);
#endif
    usleep(1);
  }
}
int main () {
  pthread_t threadid[THREAD_COUNT] = {0};
  pthread_mutex_init(&mutex, NULL);
  pthread_spin_init(&spinlock, PTHREAD_PROCESS_SHARED);  //初始化,第二个参数是否进程共享
  int i = 0;
  int count = 0;
  for (i = 0;i < THREAD_COUNT;i ++) {
    pthread_create(&threadid[i], NULL, thread_callback, &count);
  }
  for (i = 0;i < 100;i ++) {
    printf("count : %d\n", count);
    sleep(1);
  }
}

代码结果:

 

 

 

 

 

 




相关文章
|
19天前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
99 0
|
4天前
|
安全
List并发线程安全问题
【10月更文挑战第21天】`List` 并发线程安全问题是多线程编程中一个非常重要的问题,需要我们认真对待和处理。只有通过不断地学习和实践,我们才能更好地掌握多线程编程的技巧和方法,提高程序的性能和稳定性。
|
17天前
|
Java
【编程进阶知识】揭秘Java多线程:并发与顺序编程的奥秘
本文介绍了Java多线程编程的基础,通过对比顺序执行和并发执行的方式,展示了如何使用`run`方法和`start`方法来控制线程的执行模式。文章通过具体示例详细解析了两者的异同及应用场景,帮助读者更好地理解和运用多线程技术。
22 1
|
28天前
|
运维 API 计算机视觉
深度解密协程锁、信号量以及线程锁的实现原理
深度解密协程锁、信号量以及线程锁的实现原理
30 1
|
17天前
|
Java 应用服务中间件 测试技术
Java21虚拟线程:我的锁去哪儿了?
【10月更文挑战第8天】
23 0
|
22天前
|
安全 调度 数据安全/隐私保护
iOS线程锁
iOS线程锁
24 0
|
26天前
|
Java API
【多线程】乐观/悲观锁、重量级/轻量级锁、挂起等待/自旋锁、公平/非公锁、可重入/不可重入锁、读写锁
【多线程】乐观/悲观锁、重量级/轻量级锁、挂起等待/自旋锁、公平/非公锁、可重入/不可重入锁、读写锁
27 0
|
26天前
|
安全 Java 程序员
【多线程-从零开始-肆】线程安全、加锁和死锁
【多线程-从零开始-肆】线程安全、加锁和死锁
36 0
|
26天前
|
安全 Linux
Linux线程(十一)线程互斥锁-条件变量详解
Linux线程(十一)线程互斥锁-条件变量详解
|
2月前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
51 0

相关实验场景

更多