示例#1
0
    void lock() {
        XEDGE(acquire, out);

        uintptr_t locked;
        for (;;) {
            locked = locked_;
            if (!writeLocked(locked)) {
                if (L(acquire, locked_.compare_exchange_weak(
                          locked, locked|kWriterLocked))) {
                    break;
                }
            }
        }
        while (readLocked(locked)) {
            locked = L(acquire, locked_);
        }

        LPOST(out);
    }
示例#2
0
int EthernetClient::read() {
	return readLocked();
}