PySide.QtCore.QSemaphore class provides a general counting semaphore.
信号量是互斥的泛化。尽管互斥只可以被锁定一次,但多次获得信号量是可能的。信号量通常用于保护一定数量的恒等资源。
信号量支持 2 基础操作 PySide.QtCore.QSemaphore.acquire() and PySide.QtCore.QSemaphore.release() :
还有 PySide.QtCore.QSemaphore.tryAcquire() function that returns immediately if it cannot acquire the resources, and an PySide.QtCore.QSemaphore.available() function that returns the number of available resources at any time.
范例:
sem = QSemaphore(5) # sem.available() == 5
sem.acquire(3) # sem.available() == 2
sem.acquire(2) # sem.available() == 0
sem.release(5) # sem.available() == 5
sem.release(5) # sem.available() == 10
sem.tryAcquire(1) # sem.available() == 9, returns true
sem.tryAcquire(250) # sem.available() == 9, returns false
信号量的典型应用程序是用于控制由生产者线程和消费者线程共享的循环缓冲的访问。 Semaphores example shows how to use PySide.QtCore.QSemaphore to solve that problem.
信号量的非计算范例是在餐馆用餐。采用餐厅中的椅子数初始信号量。当人们到达时,他们想要座位。由于座无虚席, PySide.QtCore.QSemaphore.available() is decremented. As people leave, the PySide.QtCore.QSemaphore.available() is incremented, allowing more people to enter. If a party of 10 people want to be seated, but there are only 9 seats, those 10 people will wait, but a party of 4 people would be seated (taking the available seats to 5, making the party of 10 people wait longer).
| 参数: | n – PySide.QtCore.int |
|---|
Creates a new semaphore and initializes the number of resources it guards to n (by default, 0).
| 参数: | n – PySide.QtCore.int |
|---|
Tries to acquire n resources guarded by the semaphore. If n > PySide.QtCore.QSemaphore.available() , this call will block until enough resources are available.
| 返回类型: | PySide.QtCore.int |
|---|
Returns the number of resources currently available to the semaphore. This number can never be negative.
| 参数: | n – PySide.QtCore.int |
|---|
发行 n resources guarded by the semaphore.
This function can be used to “create” resources as well. For example:
sem = QSemaphore(5) # a semaphore that guards 5 resources
sem.acquire(5) # acquire all 5 resources
sem.release(5) # release the 5 resources
sem.release(10) # "create" 10 new resources
| 参数: | n – PySide.QtCore.int |
|---|---|
| 返回类型: | PySide.QtCore.bool |
Tries to acquire n resources guarded by the semaphore and returns true on success. If PySide.QtCore.QSemaphore.available() < n , this call immediately returns false without acquiring any resources.
范例:
sem = QSemaphore(5) # sem.available() == 5
sem.tryAcquire(250) # sem.available() == 5, returns false
sem.tryAcquire(3) # sem.available() == 2, returns true
| 参数: |
|
|---|---|
| 返回类型: |
PySide.QtCore.bool |
Tries to acquire n resources guarded by the semaphore and returns true on success. If PySide.QtCore.QSemaphore.available() < n , this call will wait for at most timeout milliseconds for resources to become available.
Note: Passing a negative number as the timeout is equivalent to calling PySide.QtCore.QSemaphore.acquire() , i.e. this function will wait forever for resources to become available if timeout is negative.
范例:
sem = QSemaphore(5) # sem.available() == 5
sem.tryAcquire(250, 1000) # sem.available() == 5, waits 1000 milliseconds and returns false
sem.tryAcquire(3, 30000) # sem.available() == 2, returns true without waiting