存在另一个具有类似功能的同步原语,互斥体.
单词“互斥”代表一个提供MUTual EXclusion线程之间。互斥锁通过使用像锁定和解锁这样的操作来确保只有一个线程可以访问临界区或数据。临界区是许多线程想要访问的共享资源。虽然如果多个线程想要读取同一个临界区没有问题,但是在前一个线程完成它自己的写入之前,没有新的线程可以修改该临界区。在这种情况下,第一个线程锁定该节,并将一直保持这种状态,直到锁被释放。
互斥体的示例
理论上,当一个线程试图锁定一个互斥锁而没有成功时(例如因为互斥锁已经被锁定),它将被暂停。然后,操作系统将利用这个机会调度一个可用的就绪线程来代替它运行。暂停的线程将继续休眠,直到它能够获取互斥体。一旦持有互斥锁的当前线程释放它,这种情况就可能发生。
因此,线程“旋转”来获取锁会浪费(也许是宝贵的)系统资源。虽然交换机自己的操作系统使用自旋锁,但在低端硬件上进行仿真时,这种资源消耗可能会成为问题。使用主机操作系统(Windows或Linux)互斥允许yuzu在其他可用的线程上继续仿真任务。
有益的是,大多数现代操作系统使用混合互斥和混合自旋锁。自旋锁方法在有多余线程的系统上运行良好。然而,对于仿真,我们需要许多线程(用于UI、音频、GPU仿真、日志等。),所以这种方法并不十分理想,尤其是在内核/线程数较低的CPU上。
因此通过从自旋锁转移到互斥锁,我们能够改进yuzu在低内核数系统上的运行方式。我们的测试结果显示,yuzu现在在4线程系统上更加可用,解决了4核/4线程CPU的稳定性问题(最显著的是在Pokémon Sword/Shield),并显著提高了(以前完全不可行的)2核/4线程CPU的性能。
低端帮最好的消息!
用户界面更改
转向用户界面的改进,Docteh已经成为这里的常客,他对我们的一些翻译漏洞很有帮助。
例如,如果Windows系统区域设置是以某些语言设置的,那么自定义RTC设置会有几个问题,使其要么显示不正确(例如缺少AM/PM指示器),要么完全不可用。固定显示格式现在允许自定义RTC在任何语言中正确显示。
中的网络选项卡Emulation > Configure… > System可能在改变语言后仍未翻译。这是一个简单的忘记在翻译中包含制表符的例子,所以Docteh修好了现在,单独的网络选项卡会正常显示。
内托昆。现在我想要一个战斗网络遗产收集,加油卡普空!