summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibThreading
AgeCommit message (Collapse)Author
2022-07-22Everywhere: Prefix 'TYPEDEF_DISTINCT_ORDERED_ID' with 'AK_'Linus Groh
2022-07-22LibThreading: Add is_started state information to Threadkleines Filmröllchen
Users can now determine whether a thread has been started or not. A started thread might also have already terminated. Implementation note: We *could* detect this with pthread APIs maybe, but this is much simpler.
2022-07-19LibC: Remove the `LibPthread` interface targetTim Schumacher
2022-07-12Everywhere: Use default StringView constructor over nullptrsin-ack
While null StringViews are just as bad, these prevent the removal of StringView(char const*) as that constructor accepts a nullptr. No functional changes.
2022-07-12Everywhere: Add sv suffix to strings relying on StringView(char const*)sin-ack
Each of these strings would previously rely on StringView's char const* constructor overload, which would call __builtin_strlen on the string. Since we now have operator ""sv, we can replace these with much simpler versions. This opens the door to being able to remove StringView(char const*). No functional changes.
2022-03-13Libraries: Use default constructors/destructors in LibThreadingLenny Maiorani
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cother-other-default-operation-rules "The compiler is more likely to get the default semantics right and you cannot implement these functions better than the compiler."
2022-02-13LibCore: Allow event loops on other threads to wake upkleines Filmröllchen
Because the wake pipe is thread-local, it was previously not possible to wake an event loop across a thread. Therefore, this commit rearchitects event loop waking by making the wake function a member of the event loop itself and having it keep a pointer to its thread's wake pipe. The global wake() function calls wake on the current thread's event loop. This also fixes a bug in BackgroundAction: it should wake the event loop it was created on, instead of the current thread's event loop.
2022-01-25LibThreading: Invoke BackgroundAction completions on origin event loopAndreas Kling
We now capture the origin thread's current event loop when setting up a BackgroundAction and then invoke the on_complete callback on that same event loop.
2022-01-23LibThreading: Introduce MutexProtected generic synchronization primitivekleines Filmröllchen
MutexProtected mirrors the identically-named Kernel primitive and can be used to synchronize access to any object that might not be thread safe on its own. Synchronization is done with a simple mutex, so access to a MutexProtected object is potentially blocking. Mutex now has an internal nesting variable which is there to harden it against lock-unlock ordering issues (e.g. double unlocking).
2022-01-14Everywhere: Use my new serenityos.org e-mail :^)kleines Filmröllchen
2021-11-02LibThreading: Remove redundant methodBen Wiederhake
2021-10-06LibThreading: Add missing headers to Mutex.hBen Wiederhake
2021-09-16LibThreading: Use default instead of an empty constructor/destructorBrian Gianforcaro
Default implementations allow for more optimizations. See: https://pvs-studio.com/en/docs/warnings/v832/
2021-09-16LibThreading: Neither Mutex or MutexLocker should be movable / copyableBrian Gianforcaro
2021-09-12LibThreading: Add ConditionVariable wrapperkleines Filmröllchen
ConditionVariable is a thin wrapper over the pthread_cond_* APIs, just as Mutex is a wrapper over pthread_mutex. Because ConditionVariable might want to wait on a high-level Mutex, it needs to be friends with it.
2021-09-02LibCore+Userland: Implement Core::deferred_invokesin-ack
Core::deferred_invoke is a way of executing an action after previously queued events have been processed. It removes the requirement of having/being a Core::Object subclass in order to defer invocation through Core::Object::deferred_invoke. Core::Object::deferred_invoke now delegates to Core::deferred_invoke. The version with the Object& argument is still present but will be removed in the following commits. This commit additionally fixes a new places where the DeferredInvocationEvent was dispatched to the event loop directly, and replaces them with the Core::deferred_invoke equivalent.
2021-07-12Revert "LibThreading: Fix BackgroundAction result use-after-free"Andreas Kling
This reverts commit b2e6088bff209e8bbb838cc86233e7d3f24ed650. This was a speculative fix that ended up not fixing the issue.
2021-07-09LibThreading: Rename Lock => MutexAndreas Kling
2021-07-09LibThreading: Remove unused "Lockable" classAndreas Kling
2021-07-07LibThreading: Use a condvar to signal the BackgroundAction threadAndreas Kling
Now that pthread_cond_t works correctly thanks to Sergey, we can use them to wake up the BackgroundAction worker thread instead of making a Unix pipe. :^)
2021-07-06LibThread: Fix formatting that was broken by the previous commitGunnar Beutner
2021-07-06LibThreading: Fix building the library on macOSGunnar Beutner
2021-07-05LibThreading: Reimplement Lock in terms of pthread_mutex_tAndreas Kling
This class was previously a spinlock that would call sys$donate() to donate its timeslice to whichever thread was holding the lock. Now that pthread_mutex_t has a fast path, let's implement Lock on top of that instead and get rid of the last remaining user of sys$donate().
2021-07-05LibThreading: Fix BackgroundAction result use-after-freeTom
We need to move the result out of the BackgroundAction object before posting the completion callback as there is a chance the BackgroundAction instance gets freed before the event loop runs our callback. Fixes #7641
2021-07-04LibThreading: Wake up the background worker thread when there's workAndreas Kling
The worker thread used for BackgroundAction was going to sleep for 1 second at a time (when there was nothing to do.) This made using background actions for anything interactive quite unresponsive since you had to wait up to 1 second before it even started on your task. We now use a simple Unix pipe to signal the worker thread that a new work item is available. This makes Assistant way more responsive when typing. :^)
2021-07-02LibThreading: Add new detach() API to ThreadSpencer Dixon
Sometimes you don't care about `joining()` the result of a thread. The underlying pthread implementation already existed for detaching and now we expose it to the higher level API.
2021-07-02LibThreading: Add ability to cancel ongoing BackgroundActionsSpencer Dixon
Handlers of the BackgroundAction are responsible for checking if the action has been cancelled and returning early.
2021-05-22Userland: Rename LibThread => LibThreadingAndreas Kling
Also rename the "LibThread" namespace to "Threading"