Oliver Kowalke
fcb981ccf7
pass flag_ as reference arg to lmbda for condition in autoreset_event
2015-09-23 17:42:17 +02:00
Oliver Kowalke
e38dc9b139
renaming of scheduler member functions
2015-09-22 19:30:29 +02:00
Oliver Kowalke
b43f288469
support for futures added
2015-09-22 19:17:08 +02:00
Oliver Kowalke
1b274d9b73
support for fiber-specific storage
2015-09-22 19:10:09 +02:00
Oliver Kowalke
38aa1f4366
support of detaching fibers added
2015-09-22 19:05:57 +02:00
Oliver Kowalke
6ad6579666
fix interruption + condition:wait()
2015-09-21 20:47:53 +02:00
Oliver Kowalke
128b534058
fix context
2015-09-21 20:34:41 +02:00
Oliver Kowalke
38457260bc
remoce noexcept specifier from context::join()
2015-09-21 20:34:09 +02:00
Oliver Kowalke
1ad58fbba1
add interruption
2015-09-21 20:18:53 +02:00
Oliver Kowalke
ef7daa9534
MSVC-fix for main_context/dispatcher_cotnext/worker_context
2015-09-21 20:05:04 +02:00
Oliver Kowalke
eec3d34fb0
remote ready-queue uses differrent hook than local ready-queue
2015-09-20 22:06:59 +02:00
Oliver Kowalke
7b1e7839b4
class bounded_channel added
2015-09-20 18:10:55 +02:00
Oliver Kowalke
b8de63af06
class unbounded_channel added
2015-09-20 18:05:05 +02:00
Oliver Kowalke
bba963c64c
class barrier added
2015-09-20 15:38:32 +02:00
Oliver Kowalke
a856a96369
class condtion added
2015-09-20 11:33:59 +02:00
Oliver Kowalke
33093a2122
add missing header in operations.hpp
2015-09-20 11:27:42 +02:00
Oliver Kowalke
b3660a3432
reorder member variables of context
...
- member hooks must be destroyed before execution_context
- otherwise an segementation fault is caused
- destruction of execution_context deallocates stack on which
the member variables of context are allocated
2015-09-20 11:25:32 +02:00
Oliver Kowalke
067547f18e
remove unused context::deallocate()
2015-09-20 11:24:27 +02:00
Oliver Kowalke
c8a1c4e4df
class recursive_timed_mutex added
2015-09-19 18:14:17 +02:00
Oliver Kowalke
6b01f060b7
class timed_mutex added
2015-09-19 18:03:41 +02:00
Oliver Kowalke
e6ddbe10a1
class recursive_mutex added
2015-09-19 17:27:45 +02:00
Oliver Kowalke
44d4ce82e0
use atomic< context * > as owner type
2015-09-19 17:26:33 +02:00
Oliver Kowalke
3f5e076f3a
class mutex added
2015-09-19 17:01:20 +02:00
Oliver Kowalke
943e21e69b
add support for signaling a context as ready
2015-09-19 16:19:02 +02:00
Oliver Kowalke
59946d4426
add noexcept keyword to scheduler::wait_until() and context::wait_until()
2015-09-19 16:18:36 +02:00
Oliver Kowalke
a89f4a5979
protect context' wait-queue for concurrent access
...
- protect wait-queue as well termiantion flag
2015-09-19 09:32:14 +02:00
Oliver Kowalke
bbf41e95f3
add spinlock used to protect forr concurrent access (threads)
...
- calls std::this_thread::yield()
2015-09-19 09:31:22 +02:00
Oliver Kowalke
6da902ff09
support sleep_for()/sleep_until()
2015-09-19 08:59:53 +02:00
Oliver Kowalke
8a9c9916c7
support this_fiber::yield()
2015-09-18 17:48:57 +02:00
Oliver Kowalke
7a794647ae
replace context::terminated_is_linked() by context::is_terminated()
...
- context::terminated_is_linked() might be missleading because this
state is transient
- if the context is pushed to the terminated-queue,
context::terminated_is_linked() returns true, if the context is
removed from terminated-queue context::terminated_is_linked() returns
false
- new flag flag_terminated intoduced
- flag_terminated will be set in context::set_terminated_(), which will
be called for worker context' in the lambda
2015-09-16 22:17:01 +02:00
Oliver Kowalke
00ae711cd7
join only non-terminated fibers
...
- context::join() adds active-context to wait-queue only
if joined context is not terminated
- we can not use terminated_is_linked() because the context
might already be removed from scheudler's termianted-queue
2015-09-16 22:11:11 +02:00
Oliver Kowalke
dd0e1d1893
add autoreset_event for waling up dispatcher context
...
- dispatcher waits on autoreset_event if ready-queue is empty
- autoreset_event is set if a ready context is pushed to the
ready-queue
2015-09-16 21:07:26 +02:00
Oliver Kowalke
a8e90aedb8
add joining a fiber
2015-09-16 20:51:26 +02:00
Oliver Kowalke
ddc5af0a36
run dispatcher context at scheduler destruction
2015-09-16 19:20:47 +02:00
Oliver Kowalke
6d43540a29
cleanup
2015-09-15 19:15:00 +02:00
Oliver Kowalke
8c4dda107c
support signaling a fiber from another thread
...
- for this first version lockfree::queue<> is used
- maybe Dimitry Byukov's mpsc intrusive queue is better suited
2015-09-13 09:20:35 +02:00
Oliver Kowalke
fe337fdf4c
fix autoreset_event::reset()
2015-09-11 21:59:33 +02:00
Oliver Kowalke
f14be69223
remove scheduler::wait:interval_ + fixups of comments
2015-09-11 21:03:09 +02:00
Oliver Kowalke
693c53d034
fix sleep_queue: cmp-op + use set<>::insert()
2015-09-11 20:45:54 +02:00
Oliver Kowalke
51d08226a4
if not fibers in queues - suspend till signaled or timeout
...
- if no fibers are ready to run suspend the thread and wait till
* signaled by scheduler::signal() for new fiber (ready to run)
* time_point of a sleeping fiber has reached
2015-09-11 20:45:54 +02:00
Oliver Kowalke
abd1ff524c
fixes for signaling interruption and wait
2015-09-11 18:42:16 +02:00
Oliver Kowalke
ebd147c08d
fix join(), this_fiber::sleep_until()
2015-09-10 20:42:28 +02:00
Oliver Kowalke
4764c1184c
signal() added
2015-09-10 19:52:08 +02:00
Oliver Kowalke
d3843efbe0
fix using intruisve::list<>
2015-09-10 18:08:10 +02:00
Oliver Kowalke
c1d3d478d8
use wait_queue with safe_link featurre, use erase_and_dispose() for
...
unlinking
2015-09-10 05:49:10 +02:00
Oliver Kowalke
c89410dfd8
uses intrusive::list<> isntread hand-written queues
2015-09-09 19:22:54 +02:00
Oliver Kowalke
291b9d7c17
small fixes
2015-09-08 21:33:20 +02:00
Oliver Kowalke
6459b76075
do not use context::active() inside scheduler
2015-09-07 22:30:26 +02:00
Oliver Kowalke
2689e34be6
store pointer to main-context in scheduler
2015-09-07 22:29:57 +02:00
Oliver Kowalke
0099b384c1
rename of flag and check function is_man_context()
2015-09-07 17:44:29 +02:00