WASIP3 Locking/Waiting Primitives#746
Open
TartanLlama wants to merge 30 commits intoWebAssembly:mainfrom
Open
Conversation
…to sy/wasip3-locks
Contributor
Author
|
Needs a new release of |
Contributor
Author
|
Strange, these test failures don't repro for me locally on an M3 Mac |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Includes #744
The first batch of changes for cooperative threading. This PR introduces the core locking and waiting primitives that will be used to implement many of the pthreads features, and reimplements the existing locks used throughout the codebase in terms of them.
sched_yieldin terms ofwasip3_thread_yield__wait.cconsisting of:struct __waitlist_node: a singly-linked list of TIDs__waitlist_wait_on: adds the current thread to the waitlist, allocating the node on the stack__waitlist_wake_(one,all): yields directly to one thread in the waitlist and unsuspends the rest__lock.cWEAK_(UN)LOCKmacro in addition to the existing(UN)LOCK, where the former is a no-op in co-operative threading buildsBecause these patches do not yet include the ability to spawn new threads, which will require llvm/llvm-project#175800, there is no additional testing added yet. Testing will be added as part of integration of the Open POSIX Test Suite, which will be coming in future PRs.