We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
“虽然表面上看信号量机制没什么明显的问题,如果信号量的等待和通知操作都是原子的,确实没什么问题。但如果不是,或者两个操作有一个终止了,就会导致糟糕的情况。 举个例子,假设有两个并发的线程,都在等待一个信号量,目前信号量的内部值为1。假设第线程A将信号量的值从1减到0,这时候控制权切换到了线程B,线程B将信号量的值从0减到-1,并且在这里被挂起等待,这时控制权回到线程A,信号量已经成为了负值,于是第一个线程也在等待。 这样的话,尽管当时的信号量是可以让线程访问资源的,但是因为非原子操作导致了所有的线程都在等待状态。”
查阅了相关部分资料,包括ChatGPT,都认为Python的信号量通知和等待操作是线程安全的,实际上不存在这样非原子操作可能引起的问题。 希望帮助查证。
The text was updated successfully, but these errors were encountered:
这里是不是说信号量的实现如果不是原子的,会有问题?
Sorry, something went wrong.
是的,但是我查阅了Galvin的Operating Systems,他们认为现代计算机和操作系统中,信号量的工作方式和互斥锁一致,而且Galvin在书中提到,wait操作是原子化的,而且这是通过现代CPU的一个原子操作“test and set”实现的。
嗯,原文这段中将的都是「如果」的情况吧。
No branches or pull requests
“虽然表面上看信号量机制没什么明显的问题,如果信号量的等待和通知操作都是原子的,确实没什么问题。但如果不是,或者两个操作有一个终止了,就会导致糟糕的情况。
举个例子,假设有两个并发的线程,都在等待一个信号量,目前信号量的内部值为1。假设第线程A将信号量的值从1减到0,这时候控制权切换到了线程B,线程B将信号量的值从0减到-1,并且在这里被挂起等待,这时控制权回到线程A,信号量已经成为了负值,于是第一个线程也在等待。
这样的话,尽管当时的信号量是可以让线程访问资源的,但是因为非原子操作导致了所有的线程都在等待状态。”
查阅了相关部分资料,包括ChatGPT,都认为Python的信号量通知和等待操作是线程安全的,实际上不存在这样非原子操作可能引起的问题。
希望帮助查证。
The text was updated successfully, but these errors were encountered: