linux 进程同步 库,linux进程同步

62e50291a81fc54b507f33cb80033297.gif linux进程同步

(6页)

276755d82d65562e5eea8bd4874f1140.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

11.9 积分

包括我自己在内,很多人对内核,进程,线程同步都不是很清楚,下面稍微总结一下: 内核同步:主要是防止多核处理器同时访问修改某段代码,或者在对设备驱动程序进行临界区保护。主要有一下几种方式:1. Mutex(互斥)头文件:#include 初始化方法:DEFINE_MUTEX(name);或者void mutex_init(struct mutex *lock);使用方法:void mutex_lock (struct mutex *lock);尝试得到互斥量,否则进入睡眠,不能被中断,否则会导致进程无法杀死int mutex_lock_interruptible (struct mutex *lock);Same, but can be interrupted. If interrupted, returns a non zero value and doesn't hold the lock. Test the return value!!! 可以被中断int mutex_trylock (struct mutex *lock);Never waits. Returns a non zero value if the mutex is not available.int mutex_is_locked(struct mutex *lock);Just tells whether the mutex is locked or not.无等待void mutex_unlock (struct mutex *lock);Releases the lock. Make sure you do it as quickly as possible! 2. Reader/writer semphopres 读写信号量Allow shared access by unlimited readers, or by only 1 writer. Writers get priority.允许有限数量的读访问,但是只能有一个写访问。void init_rwsem (struct rw_semaphore *sem);void down_read (struct rw_semaphore *sem);int down_read_trylock (struct rw_semaphore *sem);int up_read (struct rw_semaphore *sem);void down_write (struct rw_semaphore *sem);int down_write_trylock (struct rw_semaphore *sem);int up_write (struct rw_semaphore *sem);Well suited for rare writes, holding the semaphore briefly. Otherwise, readers get starved, waiting too long for the semaphore to be released. 3. Spinlocks 自旋锁初始化:Staticspinlock_t my_lock = SPIN_LOCK_UNLOCKED;Dynamicvoid spin_lock_init (spinlock_t *lock);使用:void spin_[un]lock (spinlock_t *lock);Doesn't disable interrupts. Used for locking in process context (critical sections in which you do not want to sleep).void spin_lock_irqsave / spin_unlock_irqrestore (spinlock_t *lock, unsigned long flags);Disables / restores IRQs on the local CPU.Typically used when the lock can be accessed in both process and interrupt context, to prevent preemption by interrupts  进程同步/通信1. Semaphore 信号量简单过程:semaphore sv = 1;   loop forever {   P(sv);   critical code section;   V(sv);   noncritical code section;}头文件以及函数:#include int semctl(int sem_id, int sem_num, int command, ...);int semget(key_t key, int num_sems, int sem_flags);int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops); 2.Share Memory 共享内存头文件以及函数#include void *shmat(int shm_id, const void *shm_addr, int shmflg);int shmctl(int shm_id, int cmd, struct shmid_ds *buf);int shmdt(const void *shm_addr);int shmget(key_t key, size_t size, int shmflg); 3.Message Queues 消息队列头文件以及函数#include int msgctl(int msqid, int cmd, struct msqid_ds *buf);int msgget(key_t key, int msgflg);int msgrcv(int msqid, void *msg_ptr, size_t msg_sz, long int msgtype, int msgflg);int msgsnd(int msqid, const void *msg_ptr, size_t msg_sz, int msgflg); 线程同步1. semophore 信号量简单用法:#include sem_t bin_sem; res = sem_init(&bin_sem, 0, 0);sem_wai 关 键 词: linux 进程 同步

524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值