You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
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` 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:
@@ -40,7 +40,7 @@
|
||||
template <class C, class U>
|
||||
struct ThreadArrayProcessData {
|
||||
uint32_t elements;
|
||||
uint32_t index;
|
||||
SafeNumeric<uint32_t> index;
|
||||
C *instance;
|
||||
U userdata;
|
||||
void (C::*method)(uint32_t, U);
|
||||
@@ -57,7 +57,7 @@ void process_array_thread(void *ud) {
|
||||
|
||||
T &data = *(T *)ud;
|
||||
while (true) {
|
||||
uint32_t index = atomic_increment(&data.index);
|
||||
uint32_t index = data.index.increment();
|
||||
if (index >= data.elements)
|
||||
break;
|
||||
data.process(index);
|
||||
@@ -71,9 +71,9 @@ void thread_process_array(uint32_t p_elements, C *p_instance, M p_method, U p_us
|
||||
data.method = p_method;
|
||||
data.instance = p_instance;
|
||||
data.userdata = p_userdata;
|
||||
data.index = 0;
|
||||
data.index.set(0);
|
||||
data.elements = p_elements;
|
||||
data.process(data.index); //process first, let threads increment for next
|
||||
data.process(0); //process first, let threads increment for next
|
||||
|
||||
int thread_count = OS::get_singleton()->get_processor_count();
|
||||
Thread *threads = memnew_arr(Thread, thread_count);
|
||||
|
||||
Reference in New Issue
Block a user