Commit Graph
64 Commits
Author SHA1 Message Date
Patrick Pelissier 0bf84a321b Add missing methods _capacity for MPMC queue & SPSC queue. 2018-06-27 07:28:34 +02:00
Patrick Pelissier 08f44845ce Fix issue for SPSC queue:
computing the number of elements in the queue is not reliable enough
as we can get more than than the size of the queue.
2018-04-26 22:41:11 +02:00
Patrick Pelissier 4fbffc4788 Use plain 'unsigned int' instead of 'unsigned long long'
for index of SPSC queues. There is no issue as we don't compare
the index, but only substract them.
2018-04-26 22:38:43 +02:00
Patrick Pelissier 8cf4050d3d Remove uneeded alignment constraint for SPSC queue. 2018-04-26 22:26:30 +02:00
Patrick Pelissier 005207cfd6 Remove a warning in release mode. 2018-04-26 22:05:36 +02:00
Patrick Pelissier f3de34a62b Optimization for MPMC queues:
* use of atomic_explicit functions to give the memory order we want,
* reduce the size of the index to unsigned int: even if there is an
overflow, it doesn't matter as we don't compare the index with < or >
but with ==.
2018-04-19 22:15:37 +02:00
Patrick Pelissier ba72e4ebbf Remove check in protected contract:
since there are two mutex now, there are data race when we want to check it.
TODO: Properly separate the contract.
2018-03-17 19:54:59 +01:00
Patrick Pelissier d82dc196e0 Fix datarace (?) if support for pop deferred has been activated
(a rewake of thread may be lost)
2018-03-16 23:55:16 +01:00
Patrick Pelissier f2b2335080 Fix issue with C++ not supporting passing an int constant value to an unsigned atomic type...
I definitely find this disturbing.
2018-03-16 22:59:51 +01:00
Patrick Pelissier cbb881df86 Fix overwrite branch which has a data race on number.
Rewrite it to be simpler & faster and without data race.
2018-03-10 10:13:54 +01:00
Patrick Pelissier 103e5304e8 Use of 2 mutex for buffer:
* one for the enqueue
* one for the dequeue
The number of items in the buffer is the only variable which can be accessed
by both at the same time.
This improve the performance of the communication and reduce the possibility
of priority inversion between the producer and the consummer thread.
2018-03-09 21:07:21 +01:00
Patrick Pelissier 65f39ab22e Optmize the buffer queue:
don't broadcast the condition variable if we know that
 no thread is waiting for it.
 Improve bench test from 700ms to 450ms
2018-03-09 19:15:47 +01:00
Patrick Pelissier c71613dcfe Don't display warnings about unused variables in release mode. 2018-02-28 21:05:15 +01:00
Patrick Pelissier b1443533e0 Update comment 2018-02-27 22:41:11 +01:00
Patrick Pelissier 2da51ea6e9 Remove constraint on size > 0
as workers can create a queue of size 0
in mono core system.
2018-02-23 22:12:17 +01:00
Patrick Pelissier d0e7cc41bf Add more assertions 2018-02-23 20:40:44 +01:00
Patrick Pelissier a1e791d1e9 Add queue SPSC 2018-02-23 20:38:51 +01:00
Patrick Pelissier 264249fb8b Improve queue MPMC contract checking 2018-02-23 20:13:04 +01:00
Patrick Pelissier 646df4f34e Move aligned cache line constant to commun header. 2018-02-10 08:20:37 +01:00
Patrick Pelissier 210e05f7fc Update copyright to 2018 2018-01-29 20:28:30 +01:00
Patrick Pelissier aede0547d3 Optimization: replace a division into a conditional move. 2018-01-12 18:56:01 +01:00
Patrick Pelissier 55332d61fd Fix data race for buffer in POP_RELEASE mode. 2018-01-12 18:52:34 +01:00
Patrick Pelissier 4f3823bfeb Add new function _blocking allowing to use
runtime behavior of the blocking characteristic of the
buffer regardless on how it has been configured.
2018-01-07 00:07:27 +01:00
Patrick Pelissier 3f7b16c736 If the size is constant (!= 0) when defining the buffer
then the array is embedded within the structure rather
than allocated when initialization of the structure
occurs.
2018-01-06 22:57:14 +01:00
Patrick Pelissier 362fbb39d4 Update comments 2018-01-06 21:58:30 +01:00
Patrick Pelissier 2c695526dd Fix issue with stricter C++ compiler with atomic definition.
(It still feels strange to not be able to store 0 in an atomic unsigned long).
2017-12-30 12:17:55 +01:00
Patrick Pelissier 2c6f37aa5f Add QUEUE MPMC contract. 2017-12-30 01:27:22 +01:00
Patrick Pelissier a74605088e Fix issue in case of atomic types being with lock
(const atomic_ type is invalid).
2017-12-28 12:00:03 +01:00
Patrick Pelissier 31820e7a5d Fix data race 2017-12-25 23:35:04 +01:00
Patrick Pelissier a71b0f1076 Fix issue for new option pop_release 2017-12-04 21:29:01 +01:00
Patrick Pelissier 1cadf702cd Add deferred pop release, so that we won't consider the queue as free
until the user code finished handling with the data?
2017-12-02 17:40:50 +01:00
Patrick Pelissier 9f2056468d Add buffer capacity 2017-12-01 22:46:09 +01:00
Patrick Pelissier 8cab91933f Separate blocking push & pop. 2017-11-29 22:38:54 +01:00
Patrick Pelissier cefa0ac589 Minor fix 2017-10-22 22:50:36 +02:00
Patrick Pelissier aaa8efb6e3 Add policy INIT_MOVE for queue MPMC. 2017-10-22 22:49:25 +02:00
Patrick Pelissier eed1579f76 Fix issue with C++ 2017-10-04 22:11:58 +02:00
Patrick Pelissier 669ba3d8b1 Fix warnings. 2017-10-04 21:50:08 +02:00
Patrick Pelissier a0948ed11a Fix a datarace detected by thread sanitizer. 2017-09-30 19:34:34 +02:00
Patrick Pelissier e9e7648bcd Add problem to solve detected by sanitiser. 2017-09-27 23:20:10 +02:00
Patrick Pelissier d19a5ad9de Fix warnings.
Update interface to avoid silent cast from size_t to unsigned int.
2017-09-24 23:05:46 +02:00
Patrick Pelissier 2e564088b0 Simplify the inclusion of headers. 2017-09-16 10:14:45 +02:00
Patrick Pelissier 1930bdeac1 _DEF macros checks if a global oplist is register if there is no one
given in the macro call. If it founds one, it will be it instead
of M_DEFAULT_OPLIST.
2017-09-16 08:31:22 +02:00
Patrick Pelissier 67b690bac8 Update comment. 2017-09-14 23:05:51 +02:00
Patrick Pelissier 392835463c Fix issues with new queue. 2017-09-02 22:16:47 +02:00
Patrick Pelissier 4e9375046f Update comment 2017-09-02 19:11:29 +02:00
Patrick Pelissier ae74bde7c9 WIP 2017-09-02 18:20:46 +02:00
Patrick Pelissier ec41f87f97 Add prototype for fast non locking queue MPMC 2017-09-02 18:15:00 +02:00
Patrick Pelissier b802d830b9 Add assertion. 2017-08-26 09:09:30 +02:00
Patrick Pelissier a69c67e850 Remove buffer prefix from buffers.
See commit on shared pointer.
2017-07-25 22:52:19 +02:00
Patrick Pelissier 38c15cebe2 Add statistics about how much overwrite has been done by the buffer.
Unlikley the test about overwrite.
2017-07-19 22:46:53 +02:00