Browse Source

兼容gcc 10

tags/2.9.10
tearshark 4 years ago
parent
commit
b0b9934845

+ 1
- 1
librf/src/mutex_v2.inl View File

for (int cnt = rand() % (1 + _mutex.size()); cnt >= 0; --cnt) for (int cnt = rand() % (1 + _mutex.size()); cnt >= 0; --cnt)
{ {
std::this_thread::yield(); //还要考虑多线程里运行的情况 std::this_thread::yield(); //还要考虑多线程里运行的情况
co_await yield_awaitor{};
co_await yield();
} }
} }
future_t<> _ReturnValue() const; future_t<> _ReturnValue() const;

+ 0
- 7
librf/src/without_deadlock_assemble.inl View File

static auto _Lock_nonmember2(_LA& _LkN) ->decltype(_LkN._ReturnValue()) static auto _Lock_nonmember2(_LA& _LkN) ->decltype(_LkN._ReturnValue())
{ {
// lock 2 locks, without deadlock, special case for better codegen and reduced metaprogramming for common case // lock 2 locks, without deadlock, special case for better codegen and reduced metaprogramming for common case
#if defined(__GNUC__)
for (;;) for (;;)
{ {
auto _Result__ = LOCK_ASSEMBLE_AWAIT(_Lock_attempt_small2(_LkN, 0, 1)); auto _Result__ = LOCK_ASSEMBLE_AWAIT(_Lock_attempt_small2(_LkN, 0, 1));
_Result__ = LOCK_ASSEMBLE_AWAIT(_Lock_attempt_small2(_LkN, 1, 0)); _Result__ = LOCK_ASSEMBLE_AWAIT(_Lock_attempt_small2(_LkN, 1, 0));
if (!_Result__) break; if (!_Result__) break;
} }
#else
while (LOCK_ASSEMBLE_AWAIT(_Lock_attempt_small2(_LkN, 0, 1)) &&
LOCK_ASSEMBLE_AWAIT(_Lock_attempt_small2(_LkN, 1, 0)))
{ // keep trying
}
#endif
} }
template<_LockAssembleT _LA> template<_LockAssembleT _LA>

+ 0
- 3
tutorial/test_async_mutex.cpp View File

++g_counter; ++g_counter;
//std::cout << "push:" << g_counter << " on " << idx << std::endl; //std::cout << "push:" << g_counter << " on " << idx << std::endl;
//co_await 5ms; //co_await 5ms;
} }
} }
--g_counter; --g_counter;
//std::cout << "pop :" << g_counter << " on " << idx << std::endl; //std::cout << "pop :" << g_counter << " on " << idx << std::endl;
//co_await 5ms; //co_await 5ms;
//co_await mutex_t::unlock(a, b, c);
} }
} }

Loading…
Cancel
Save