… | |
… | |
2078 | is that the author does not know of a simple (or any) algorithm for a |
2078 | is that the author does not know of a simple (or any) algorithm for a |
2079 | multiple-writer-single-reader queue that works in all cases and doesn't |
2079 | multiple-writer-single-reader queue that works in all cases and doesn't |
2080 | need elaborate support such as pthreads. |
2080 | need elaborate support such as pthreads. |
2081 | |
2081 | |
2082 | That means that if you want to queue data, you have to provide your own |
2082 | That means that if you want to queue data, you have to provide your own |
2083 | queue. And here is how you would implement locking: |
2083 | queue. But at least I can tell you would implement locking around your |
|
|
2084 | queue: |
2084 | |
2085 | |
2085 | =over 4 |
2086 | =over 4 |
2086 | |
2087 | |
2087 | =item queueing from a signal handler context |
2088 | =item queueing from a signal handler context |
2088 | |
2089 | |
… | |
… | |
2125 | |
2126 | |
2126 | =item queueing from a thread context |
2127 | =item queueing from a thread context |
2127 | |
2128 | |
2128 | The strategy for threads is different, as you cannot (easily) block |
2129 | The strategy for threads is different, as you cannot (easily) block |
2129 | threads but you can easily preempt them, so to queue safely you need to |
2130 | threads but you can easily preempt them, so to queue safely you need to |
2130 | emply a traditional mutex lock, such as in this pthread example: |
2131 | employ a traditional mutex lock, such as in this pthread example: |
2131 | |
2132 | |
2132 | static ev_async mysig; |
2133 | static ev_async mysig; |
2133 | static pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER; |
2134 | static pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER; |
2134 | |
2135 | |
2135 | static void |
2136 | static void |