QSemaphoreclass provides a general counting semaphore. 更多 …
def
acquire
([n=1])
def
available
()
def
release
([n=1])
def
tryAcquire
([n=1])
def
tryAcquire
(n, timeout)
A semaphore is a generalization of a mutex. While a mutex can only be locked once, it’s possible to acquire a semaphore multiple times. Semaphores are typically used to protect a certain number of identical resources.
信号量支持 2 基础操作
acquire()andrelease():
acquire( n ) 试着获得 n resources. If there aren’t that many resources available, the call will block until this is the case.
release( n ) 释放 n 资源。
There’s also a
tryAcquire()function that returns immediately if it cannot acquire the resources, and anavailable()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信号量的典型应用程序是用于控制由生产者线程和消费者线程共享的循环缓冲的访问。 信号量范例 shows how to use
QSemaphoreto solve that problem.信号量的非计算范例是在餐馆用餐。采用餐厅中的椅子数初始信号量。当人们到达时,他们想要座位。由于座无虚席,
available()is decremented. As people leave, theavailable()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).
QSemaphore
(
[
n=0
]
)
¶
- param n
int
Creates a new semaphore and initializes the number of resources it guards to
n
(by default, 0).
另请参阅
PySide2.QtCore.QSemaphore.
acquire
(
[
n=1
]
)
¶
n
–
int
Tries to acquire
n
resources guarded by the semaphore. If
n
>
available()
, this call will block until enough resources are available.
PySide2.QtCore.QSemaphore.
available
(
)
¶
int
Returns the number of resources currently available to the semaphore. This number can never be negative.
PySide2.QtCore.QSemaphore.
release
(
[
n=1
]
)
¶
n
–
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
QSemaphoreReleaser
是
RAII
wrapper around this function.
PySide2.QtCore.QSemaphore.
tryAcquire
(
[
n=1
]
)
¶
n
–
int
bool
Tries to acquire
n
resources guarded by the semaphore and returns
true
on success. If
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
另请参阅
PySide2.QtCore.QSemaphore.
tryAcquire
(
n
,
timeout
)
¶
n
–
int
timeout
–
int
bool
Tries to acquire
n
resources guarded by the semaphore and returns
true
on success. If
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
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
另请参阅