mirror of
https://github.com/mutouyun/cpp-ipc.git
synced 2025-12-07 01:06:45 +08:00
update
This commit is contained in:
parent
4049e78c32
commit
b65be99045
@ -71,7 +71,7 @@ inline void yield(K& k) noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t N = 4096, typename K, typename F>
|
template <std::size_t N = 4096, typename K, typename F>
|
||||||
inline void sleep(K& k, F&& f) noexcept {
|
inline void sleep(K& k, F&& f) {
|
||||||
if (k < static_cast<K>(N)) {
|
if (k < static_cast<K>(N)) {
|
||||||
std::this_thread::yield();
|
std::this_thread::yield();
|
||||||
}
|
}
|
||||||
@ -86,7 +86,7 @@ inline void sleep(K& k, F&& f) noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t N = 4096, typename K>
|
template <std::size_t N = 4096, typename K>
|
||||||
inline void sleep(K& k) noexcept {
|
inline void sleep(K& k) {
|
||||||
sleep<N>(k, [] { return false; });
|
sleep<N>(k, [] { return false; });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -105,9 +105,9 @@ public:
|
|||||||
#pragma pop_macro("IPC_PTHREAD_FUNC_")
|
#pragma pop_macro("IPC_PTHREAD_FUNC_")
|
||||||
|
|
||||||
class semaphore {
|
class semaphore {
|
||||||
mutex lock_;
|
mutex lock_;
|
||||||
condition cond_;
|
condition cond_;
|
||||||
long volatile counter_;
|
long counter_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool open(long count = 0) {
|
bool open(long count = 0) {
|
||||||
|
|||||||
@ -62,7 +62,7 @@ class condition {
|
|||||||
mutex lock_;
|
mutex lock_;
|
||||||
semaphore sema_, handshake_;
|
semaphore sema_, handshake_;
|
||||||
|
|
||||||
long volatile * counter_ = nullptr;
|
long * counter_ = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
friend bool operator==(condition const & c1, condition const & c2) {
|
friend bool operator==(condition const & c1, condition const & c2) {
|
||||||
@ -73,7 +73,7 @@ public:
|
|||||||
return !(c1 == c2);
|
return !(c1 == c2);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool open(std::string const & name, long volatile * counter) {
|
bool open(std::string const & name, long * counter) {
|
||||||
if (lock_ .open(name + "__COND_MTX__") &&
|
if (lock_ .open(name + "__COND_MTX__") &&
|
||||||
sema_ .open(name + "__COND_SEM__") &&
|
sema_ .open(name + "__COND_SEM__") &&
|
||||||
handshake_.open(name + "__COND_HAN__")) {
|
handshake_.open(name + "__COND_HAN__")) {
|
||||||
@ -130,7 +130,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class waiter {
|
class waiter {
|
||||||
long volatile counter_ = 0;
|
long counter_ = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using handle_t = condition;
|
using handle_t = condition;
|
||||||
|
|||||||
@ -25,7 +25,7 @@ class condition_impl : public ipc::detail::condition {
|
|||||||
public:
|
public:
|
||||||
bool open(std::string const & name) {
|
bool open(std::string const & name) {
|
||||||
if (h_.acquire((name + "__COND_CNT__").c_str(), sizeof(long volatile))) {
|
if (h_.acquire((name + "__COND_CNT__").c_str(), sizeof(long volatile))) {
|
||||||
return ipc::detail::condition::open(name, static_cast<long volatile*>(h_.get()));
|
return ipc::detail::condition::open(name, static_cast<long *>(h_.get()));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user