Modernize atomics
- Based on C++11's `atomic` - Reworked `SafeRefCount` (based on the rewrite by @hpvb) - Replaced free atomic functions by the new `SafeNumeric<T>` - Replaced wrong cases of `volatile bool` by the new `SafeFlag` - Platform-specific implementations no longer needed Co-authored-by: Hein-Pieter van Braam-Stewart <hp@tmm.cx>
This commit is contained in:
@ -33,7 +33,7 @@
|
||||
#include "core/os/os.h"
|
||||
|
||||
void PhysicsServer2DWrapMT::thread_exit() {
|
||||
exit = true;
|
||||
exit.set();
|
||||
}
|
||||
|
||||
void PhysicsServer2DWrapMT::thread_step(real_t p_delta) {
|
||||
@ -52,9 +52,9 @@ void PhysicsServer2DWrapMT::thread_loop() {
|
||||
|
||||
physics_2d_server->init();
|
||||
|
||||
exit = false;
|
||||
step_thread_up = true;
|
||||
while (!exit) {
|
||||
exit.clear();
|
||||
step_thread_up.set();
|
||||
while (!exit.is_set()) {
|
||||
// flush commands one by one, until exit is requested
|
||||
command_queue.wait_and_flush_one();
|
||||
}
|
||||
@ -98,7 +98,7 @@ void PhysicsServer2DWrapMT::init() {
|
||||
if (create_thread) {
|
||||
//OS::get_singleton()->release_rendering_thread();
|
||||
thread.start(_thread_callback, this);
|
||||
while (!step_thread_up) {
|
||||
while (!step_thread_up.is_set()) {
|
||||
OS::get_singleton()->delay_usec(1000);
|
||||
}
|
||||
} else {
|
||||
@ -120,7 +120,6 @@ PhysicsServer2DWrapMT::PhysicsServer2DWrapMT(PhysicsServer2D *p_contained, bool
|
||||
physics_2d_server = p_contained;
|
||||
create_thread = p_create_thread;
|
||||
step_pending = 0;
|
||||
step_thread_up = false;
|
||||
|
||||
pool_max_size = GLOBAL_GET("memory/limits/multithreaded_server/rid_pool_prealloc");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user