Example #1
0
	unsigned int pull()
	{
		int stage = _stage.load( std::memory_order_relaxed );
		bool changed = _state[stage].changed.load( std::memory_order_relaxed );

		if( changed )
		{
			_state[_out].changed.store( false, std::memory_order_relaxed );
			_out = _stage.exchange( _out, std::memory_order_acquire );
		  return _state[_out].frames;
		}
    return 0;
	}
Example #2
0
void *thread_func(void *ptr)
{
    int self = (int)(size_t)(ptr);

    for (int i = 0; i < 1000; ++i) {
        auto newitem = new Item();
        newitem->value = (self * 1000) + i;
        auto old = last.exchange(newitem);
        if (!old) {
            liststart = newitem;
        } else {
            old->next = newitem;
        }

        sched_yield();
    }
    return NULL;
}
	void push( unsigned int frames )
	{
		_state[_in].frames = frames;
		_state[_in].changed.store( true, boost::memory_order_relaxed );
		_in = _stage.exchange( _in, boost::memory_order_release );
	}
Example #4
0
	bool deactivate_()
	{ return ACTIVE == state_.exchange( DEACTIVE); }