ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.pod
(Generate patch)

Comparing libev/ev.pod (file contents):
Revision 1.254 by root, Tue Jul 14 19:02:43 2009 UTC vs.
Revision 1.255 by root, Tue Jul 14 19:11:31 2009 UTC

3998protecting the loop data, respectively. 3998protecting the loop data, respectively.
3999 3999
4000 static void 4000 static void
4001 l_release (EV_P) 4001 l_release (EV_P)
4002 { 4002 {
4003 udat *u = ev_userdata (EV_A); 4003 userdata *u = ev_userdata (EV_A);
4004 pthread_mutex_unlock (&u->lock); 4004 pthread_mutex_unlock (&u->lock);
4005 } 4005 }
4006 4006
4007 static void 4007 static void
4008 l_acquire (EV_P) 4008 l_acquire (EV_P)
4009 { 4009 {
4010 udat *u = ev_userdata (EV_A); 4010 userdata *u = ev_userdata (EV_A);
4011 pthread_mutex_lock (&u->lock); 4011 pthread_mutex_lock (&u->lock);
4012 } 4012 }
4013 4013
4014The event loop thread first acquires the mutex, and then jumps straight 4014The event loop thread first acquires the mutex, and then jumps straight
4015into C<ev_loop>: 4015into C<ev_loop>:
4033have been called: 4033have been called:
4034 4034
4035 static void 4035 static void
4036 l_invoke (EV_P) 4036 l_invoke (EV_P)
4037 { 4037 {
4038 udat *u = ev_userdata (EV_A); 4038 userdata *u = ev_userdata (EV_A);
4039 4039
4040 wake_up_other_thread_in_some_magic_or_not_so_magic_way (); 4040 wake_up_other_thread_in_some_magic_or_not_so_magic_way ();
4041 4041
4042 pthread_cond_wait (&u->invoke_cv, &u->lock); 4042 pthread_cond_wait (&u->invoke_cv, &u->lock);
4043 } 4043 }
4047thread to continue: 4047thread to continue:
4048 4048
4049 static void 4049 static void
4050 real_invoke_pending (EV_P) 4050 real_invoke_pending (EV_P)
4051 { 4051 {
4052 udat *u = ev_userdata (EV_A); 4052 userdata *u = ev_userdata (EV_A);
4053 4053
4054 pthread_mutex_lock (&u->lock); 4054 pthread_mutex_lock (&u->lock);
4055 ev_invoke_pending (EV_A); 4055 ev_invoke_pending (EV_A);
4056 pthread_cond_signal (&u->invoke_cv); 4056 pthread_cond_signal (&u->invoke_cv);
4057 pthread_mutex_unlock (&u->lock); 4057 pthread_mutex_unlock (&u->lock);
4059 4059
4060Whenever you want to start/stop a watcher or do other modifications to an 4060Whenever you want to start/stop a watcher or do other modifications to an
4061event loop, you will now have to lock: 4061event loop, you will now have to lock:
4062 4062
4063 ev_timer timeout_watcher; 4063 ev_timer timeout_watcher;
4064 udat *u = ev_userdata (EV_A); 4064 userdata *u = ev_userdata (EV_A);
4065 4065
4066 ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.); 4066 ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);
4067 4067
4068 pthread_mutex_lock (&u->lock); 4068 pthread_mutex_lock (&u->lock);
4069 ev_timer_start (EV_A_ &timeout_watcher); 4069 ev_timer_start (EV_A_ &timeout_watcher);
4078=head3 COROUTINES 4078=head3 COROUTINES
4079 4079
4080Libev is very accommodating to coroutines ("cooperative threads"): 4080Libev is very accommodating to coroutines ("cooperative threads"):
4081libev fully supports nesting calls to its functions from different 4081libev fully supports nesting calls to its functions from different
4082coroutines (e.g. you can call C<ev_loop> on the same loop from two 4082coroutines (e.g. you can call C<ev_loop> on the same loop from two
4083different coroutines, and switch freely between both coroutines running the 4083different coroutines, and switch freely between both coroutines running
4084loop, as long as you don't confuse yourself). The only exception is that 4084the loop, as long as you don't confuse yourself). The only exception is
4085you must not do this from C<ev_periodic> reschedule callbacks. 4085that you must not do this from C<ev_periodic> reschedule callbacks.
4086 4086
4087Care has been taken to ensure that libev does not keep local state inside 4087Care has been taken to ensure that libev does not keep local state inside
4088C<ev_loop>, and other calls do not usually allow for coroutine switches as 4088C<ev_loop>, and other calls do not usually allow for coroutine switches as
4089they do not call any callbacks. 4089they do not call any callbacks.
4090 4090

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines