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

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

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

自旋锁与互斥锁的比较:

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);
  }
}

代码结果:

 

 

 

 

 

 




相关文章
|
3天前
|
Java
并发编程的艺术:Java线程与锁机制探索
【6月更文挑战第21天】**并发编程的艺术:Java线程与锁机制探索** 在多核时代,掌握并发编程至关重要。本文探讨Java中线程创建(`Thread`或`Runnable`)、线程同步(`synchronized`关键字与`Lock`接口)及线程池(`ExecutorService`)的使用。同时,警惕并发问题,如死锁和饥饿,遵循最佳实践以确保应用的高效和健壮。
10 2
|
3天前
|
Java
Java Socket编程与多线程:提升客户端-服务器通信的并发性能
【6月更文挑战第21天】Java网络编程中,Socket结合多线程提升并发性能,服务器对每个客户端连接启动新线程处理,如示例所示,实现每个客户端的独立操作。多线程利用多核处理器能力,避免串行等待,提升响应速度。防止死锁需减少共享资源,统一锁定顺序,使用超时和重试策略。使用synchronized、ReentrantLock等维持数据一致性。多线程带来性能提升的同时,也伴随复杂性和挑战。
|
12天前
|
安全 Java API
Java并发基础-启动和终止线程
Java并发基础-启动和终止线程
21 0
|
12天前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
16 0
|
4天前
|
安全 Java Python
GIL是Python解释器的锁,确保单个进程中字节码执行的串行化,以保护内存管理,但限制了多线程并行性。
【6月更文挑战第20天】GIL是Python解释器的锁,确保单个进程中字节码执行的串行化,以保护内存管理,但限制了多线程并行性。线程池通过预创建线程池来管理资源,减少线程创建销毁开销,提高效率。示例展示了如何使用Python实现一个简单的线程池,用于执行多个耗时任务。
17 6
|
7天前
|
API
linux---线程互斥锁总结及代码实现
linux---线程互斥锁总结及代码实现
|
5天前
|
调度
线程操作:锁、条件变量的使用
线程操作:锁、条件变量的使用
13 1
|
5天前
|
监控 程序员 调度
协程实现单线程并发(入门)
协程实现单线程并发(入门)
11 1
|
7天前
|
API
Linux---线程读写锁详解及代码实现
Linux---线程读写锁详解及代码实现
|
9天前
|
Java Python
Python中的并发编程(3)线程池、锁
Python中的并发编程(3)线程池、锁