|
|
@ -92,7 +92,8 @@ public: |
|
|
|
|
|
|
|
|
void DoWork1() { |
|
|
void DoWork1() { |
|
|
trap2 = false; |
|
|
trap2 = false; |
|
|
while (trap.load()); |
|
|
|
|
|
|
|
|
while (trap.load()) |
|
|
|
|
|
; |
|
|
for (u32 i = 0; i < 12000; i++) { |
|
|
for (u32 i = 0; i < 12000; i++) { |
|
|
value1 += i; |
|
|
value1 += i; |
|
|
} |
|
|
} |
|
|
@ -105,7 +106,8 @@ public: |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void DoWork2() { |
|
|
void DoWork2() { |
|
|
while (trap2.load()); |
|
|
|
|
|
|
|
|
while (trap2.load()) |
|
|
|
|
|
; |
|
|
value2 = 2000; |
|
|
value2 = 2000; |
|
|
trap = false; |
|
|
trap = false; |
|
|
Fiber::YieldTo(fiber2, fiber1); |
|
|
Fiber::YieldTo(fiber2, fiber1); |
|
|
@ -197,9 +199,12 @@ static void ThreadStart2_2(u32 id, TestControl2& test_control) { |
|
|
TEST_CASE("Fibers::InterExchange", "[common]") { |
|
|
TEST_CASE("Fibers::InterExchange", "[common]") { |
|
|
TestControl2 test_control{}; |
|
|
TestControl2 test_control{}; |
|
|
test_control.thread_fibers.resize(2, nullptr); |
|
|
test_control.thread_fibers.resize(2, nullptr); |
|
|
test_control.fiber1 = std::make_shared<Fiber>(std::function<void(void*)>{WorkControl2_1}, &test_control); |
|
|
|
|
|
test_control.fiber2 = std::make_shared<Fiber>(std::function<void(void*)>{WorkControl2_2}, &test_control); |
|
|
|
|
|
test_control.fiber3 = std::make_shared<Fiber>(std::function<void(void*)>{WorkControl2_3}, &test_control); |
|
|
|
|
|
|
|
|
test_control.fiber1 = |
|
|
|
|
|
std::make_shared<Fiber>(std::function<void(void*)>{WorkControl2_1}, &test_control); |
|
|
|
|
|
test_control.fiber2 = |
|
|
|
|
|
std::make_shared<Fiber>(std::function<void(void*)>{WorkControl2_2}, &test_control); |
|
|
|
|
|
test_control.fiber3 = |
|
|
|
|
|
std::make_shared<Fiber>(std::function<void(void*)>{WorkControl2_3}, &test_control); |
|
|
std::thread thread1(ThreadStart2_1, 0, std::ref(test_control)); |
|
|
std::thread thread1(ThreadStart2_1, 0, std::ref(test_control)); |
|
|
std::thread thread2(ThreadStart2_2, 1, std::ref(test_control)); |
|
|
std::thread thread2(ThreadStart2_2, 1, std::ref(test_control)); |
|
|
thread1.join(); |
|
|
thread1.join(); |
|
|
@ -291,8 +296,10 @@ static void ThreadStart3(u32 id, TestControl3& test_control) { |
|
|
TEST_CASE("Fibers::StartRace", "[common]") { |
|
|
TEST_CASE("Fibers::StartRace", "[common]") { |
|
|
TestControl3 test_control{}; |
|
|
TestControl3 test_control{}; |
|
|
test_control.thread_fibers.resize(2, nullptr); |
|
|
test_control.thread_fibers.resize(2, nullptr); |
|
|
test_control.fiber1 = std::make_shared<Fiber>(std::function<void(void*)>{WorkControl3_1}, &test_control); |
|
|
|
|
|
test_control.fiber2 = std::make_shared<Fiber>(std::function<void(void*)>{WorkControl3_2}, &test_control); |
|
|
|
|
|
|
|
|
test_control.fiber1 = |
|
|
|
|
|
std::make_shared<Fiber>(std::function<void(void*)>{WorkControl3_1}, &test_control); |
|
|
|
|
|
test_control.fiber2 = |
|
|
|
|
|
std::make_shared<Fiber>(std::function<void(void*)>{WorkControl3_2}, &test_control); |
|
|
std::thread thread1(ThreadStart3, 0, std::ref(test_control)); |
|
|
std::thread thread1(ThreadStart3, 0, std::ref(test_control)); |
|
|
std::thread thread2(ThreadStart3, 1, std::ref(test_control)); |
|
|
std::thread thread2(ThreadStart3, 1, std::ref(test_control)); |
|
|
thread1.join(); |
|
|
thread1.join(); |
|
|
@ -302,6 +309,4 @@ TEST_CASE("Fibers::StartRace", "[common]") { |
|
|
REQUIRE(test_control.value3 == 1); |
|
|
REQUIRE(test_control.value3 == 1); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace Common
|
|
|
} // namespace Common
|