Linux内核中的同步原语:自旋锁入门
1. 同步原语概述
同步原语是一种软件机制,它能让两个或多个并行进程或线程不会同时执行同一段代码。例如,在kernel/time/clocksource.c文件的__clocksource_register_scale函数中,有如下代码:
mutex_lock(&clocksource_mutex); ... clocksource_enqueue(cs); clocksource_enqueue_watchdog(cs); clocksource_select(); ... mutex_unlock(&clocksource_mutex);这里的mutex_lock和mutex_unlock函数基于互斥锁同步原语实现加锁和解锁操作。当mutex_lock执行时,能防止在持有锁的进程执行mutex_unlock之前,其他线程执行这段代码,从而避免对clocksource_list的并行操作。如果两个并行进程同时尝试注册时钟源,可能会出现竞争条件。比如clocksource_enqueue函数会将给定的时钟源添加到clocksource_list中,如果两个进程同时执行,可能会导致数据覆盖。
Linux内核提供了多种同步原语,包括: <