Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add RwLock to embassy-sync #3932

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

AlixANNERAUD
Copy link

@AlixANNERAUD AlixANNERAUD commented Feb 28, 2025

Fixes #1394

The implementation is very similar to Mutex

@AlixANNERAUD AlixANNERAUD marked this pull request as draft February 28, 2025 14:53
* Implement `RawRwLock` trait with methods for read and write locking
* Implement `RawRwLockImpl` struct with atomic state and waker
* Implement `RawRwLockImpl::lock_read`, `RawRwLockImpl::try_lock_read`, and `RawRwLockImpl::unlock_read` methods
* Implement `RawRwLockImpl::lock_write`, `RawRwLockImpl::try_lock_write`, and `RawRwLockImpl::unlock_write` methods
@AlixANNERAUD AlixANNERAUD marked this pull request as ready for review February 28, 2025 22:28
Copy link
Member

@lulf lulf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR! I have some question specifically around the critical section raw rw lock, which I don't understand how can work in a single executor.

let mut state = self.state.borrow_mut();

while *state & WRITER != 0 {
// Spin until the writer releases the lock
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Won't spinning effectively prevent this to be used within the same executor as it would deadlock here? Same in the lock_write().

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

embassy-sync: Add RwLock
2 participants