utex)
g模块中的Lock类来实现互斥锁。
使用互斥锁的示例代码如下
portg
创建锁对象g.Lock()
获取锁
lock.acquire()
访问共享资源t(‘hello world’)
释放锁
lock.release()
创建两个线程gc)gc)
启动线程
t1.start()
t2.start()
等待线程结束()()
c函数中通过调用Lock对象的acquire方法来获取锁,访问共享资源,通过调用Lock对象的release方法来释放锁。这样可以保证同一时刻只有一个线程可以访问共享资源。
aphore)
gaphore类来实现信号量。
使用信号量的示例代码如下
portg
创建信号量对象,同时只允许两个线程访问共享资源aphoregaphore(2)
获取信号量aphore.acquire()
访问共享资源t(‘hello world’)
释放信号量aphore.release()
创建四个线程gc)gc)gc)gc)
启动线程
t1.start()
t2.start()
t3.start()
t4.start()
等待线程结束()()()()
aphorecaphoreaphore对象的release方法来释放信号量。这样可以保证同时访问共享资源的线程数量不超过两个。
中提供了两种不同的锁机制互斥锁和信号量。互斥锁保证同一时刻只有一个线程可以访问共享资源,而信号量允许多个线程同时访问共享资源,但是限制同时访问的线程数量。在使用锁机制时,要注意避免死锁问题。