本文整理汇总了C++中concurrent_queue类的典型用法代码示例。如果您正苦于以下问题:C++ concurrent_queue类的具体用法?C++ concurrent_queue怎么用?C++ concurrent_queue使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了concurrent_queue类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: producer
void producer(std::atomic<bool>& keep_working, concurrent_queue<std::vector<char> >& sink)
{
while (keep_working.load())
{
if (sink.size() > 10000)
std::this_thread::yield();
else
sink.push(std::vector<char>(rand() % 10000));
}
}
示例2: worker
void* worker(void* d) {
shared_ptr<UploadBuffer> pdata;
srand(time(NULL));
// get data from fq
while (1) {
fq.deQ(pdata);
if (pdata->index == 0) {
// inited data??
cout << "inited data" << std::endl;
}
if (pdata->index == -1) { // finished
// cout<<"finished"<<std::endl;
break;
}
MD5Calc m;
m.Update(pdata->data.getdata(), pdata->data.len());
cout << pdata->index << "\t" << m.Get() << std::endl;
// sleep(rand()%5);
// reset pdata
pdata->data.reset();
pdata->index = 0;
// re queue to empty queue
eq.enQ(pdata);
}
// cout<<"quit...\n";
}
示例3: child
void child() {
for (int i=1; i<=max_num; i++) {
cq.push(i);
}
// Queue is closed only if all child threads are finished
if(bar.wait()) cq.close();
}
示例4: main
int main()
{
srand(time(0));
// Custom scheduling is not required - can be integrated
// to other systems transparently
main_tasks.push([]
{
asynchronous([]
{
return async_user_handler(),
finished = true;
});
});
Task task;
while(!finished)
{
main_tasks.pop(task);
task();
}
cout << "Done" << std::endl;
return EXIT_SUCCESS;
}
示例5: ccr_worker
static void* ccr_worker(void *arg)
{
int r, resume;
process_t *proc;
while (1)
{
// Checks if threads need to be killed and the the ready procces's queue is empty
// That way only when the queue is empty the threads are killed
// if ((free_flag.compare_and_swap(false, true)) && (prc_ready.empty()))
if (free_flag.compare_and_swap(false, true))
{
pthread_t thread = pthread_self();
// removes reference from the pool
thr_pool.remove(thread);
// checks if threre's more threads to kill and set the flag
if (free_workers.fetch_and_decrement() > 1)
{
free_flag.compare_and_swap(true, false);
}
//kills the current thread
pthread_exit(NULL);
}
prc_ready.pop(proc);
if (!proc) return NULL;
r = lua_resume(proc->L, 0);
switch (r)
{
case LUA_YIELD:
//cerr << "Yield!\n";
switch (proc->status)
{
case PS_READY:
// releasing the lock acquired in ccr_yield
proc->wlock.release();
prc_ready.push(proc);
break;
case PS_BLOCKING:
proc->status = PS_BLOCKED;
// releasing the lock acquired in ccr_yield
proc->wlock.release();
break;
}
break;
case LUA_ERRRUN:
case LUA_ERRMEM:
case LUA_ERRERR:
cerr << "[ERROR][PROCESSING A LUA PROCESS] " << lua_tostring(proc->L, -1) << endl;
// fall-through
case 0:
lua_close(proc->L);
mbx_close(proc->mbox);
prc_free(proc);
break;
}
}
return NULL;
}
示例6: pop_if_present
//! Get pair of matricies if present
bool pop_if_present( pair<Matrix2x2, Matrix2x2> &mm ) {
// get first matrix if present
if(!Queue.pop_if_present(mm.first)) return false;
// get second matrix if present
if(!Queue.pop_if_present(mm.second)) {
// if not, then push back first matrix
Queue.push(mm.first); return false;
}
return true;
}
示例7: main
int main(int argc, char*argv[])
{
size_t nElements = 1280000;
size_t nthreads = 1;
struct timeval start, stop;
if (argc >= 2) {
nthreads = atoi(argv[1]);
}
if (argc >= 3) {
nElements = atoi(argv[2]);
}
if (argc >= 4) {
objsize = atoi(argv[3]);
}
task_scheduler_init init(nthreads);
for (uintptr_t i = 0; i < nElements; i++) {
cq.push((void*)i);
}
for (uintptr_t i = 0; i < nElements; i++) {
void* j;
cq.try_pop(j);
assert(i == (uintptr_t)j);
}
assert(cq.empty());
tick_count t0 = tick_count::now();
parallel_for(blocked_range<size_t>(0, nElements), loop_queuer());
tick_count t1 = tick_count::now();
printf("queue time: %f secs\n", (t1 - t0).seconds());
t0 = tick_count::now();
parallel_for(blocked_range<size_t>(0, nElements), loop_dequeuer());
t1 = tick_count::now();
printf("dequeue time: %f secs\n", (t1 - t0).seconds());
assert(cq.empty());
t0 = tick_count::now();
parallel_for(blocked_range<size_t>(0, nElements), loop_queuer());
parallel_for(blocked_range<size_t>(0, nElements), loop_dequeuer());
t1 = tick_count::now();
printf("both time: %f secs\n", (t1 - t0).seconds());
assert(cq.empty());
printf("success!\n");
return 0;
}
示例8:
//! executing filter
/*override*/ void* operator()(void*)
{
int n = --N;
if(n <= 0) return 0;
Queue.push( Matrix1110 );
return &Queue;
}
示例9: while
void *worker(void *a) {
int r;
while (1) {
q.deQ(r);
if (r == -1) break;
}
return NULL;
}
示例10: operator
void operator() (const blocked_range<size_t>&r) const
{
size_t begin = r.begin();
size_t end = r.end();
for (size_t i = begin; i < end; i++) {
void * tmp = tbballoc.allocate(1);
memset(tmp, 1, objsize);
cq.push(tmp);
}
}
示例11: ccr_rawsend
int ccr_rawsend(process_t *proc, message_t *msg)
{
queuing_rw_mutex::scoped_lock rlock;
rlock.acquire(proc->lock, false);
if (mbx_put(proc->mbox, msg))
{
if (proc->status.compare_and_swap(PS_READY, PS_BLOCKED) == PS_BLOCKED)
prc_ready.push(proc);
rlock.release();
return 1;
}
rlock.release();
return 0;
}
示例12: writefn
void writefn(std::string outaudio, std::string outdiff)
{
std::ofstream oaudio(outaudio, std::ios::binary);
//int fourcc = CV_FOURCC('4', '6', '2', 'H');
int fourcc = -1;
std::cout << "creating VideoWriter\n";
std::cout << "fps " << vid_fps << ", reduction " << reduction << "\n";
cv::VideoWriter odiff(outdiff.c_str(), fourcc, vid_fps / reduction, cv::Size(width, height), true);
//cv::VideoWriter omask(outmask.c_str(), fourcc, vid_fps / reduction, cv::Size(width, height), true);
std::cout << "done creating VideoWriter\n";
WriteElement element;
while (true)
{
bool rv = writequeue.try_pop(element);
if (!rv) continue;
if (element.done) break;
// video
odiff.write(element.mat);
// audio
int u = (int)iround(audiorate * (element.frameno + 0) / (vid_fps / reduction));
int v = (int)iround(audiorate * (element.frameno + 1) / (vid_fps / reduction));
int nsamples = v - u;
std::vector<int16_t> samples(nsamples, 0);
for (int k = 0; k < nsamples; k += 1)
samples[k] = sin(audiofreq * 2 * M_PI / audiorate * (u + k))
* ((1<<15)-1)
* linmap(20 * log10(element.masksum), -90.0, 0.0, 0.0, 1.0);
oaudio.write((char*)samples.data(), sizeof(samples[0]) * nsamples);
}
odiff.release();
oaudio.close();
std::cout << "writer is done\n";
}
示例13: ccr_finalize
static int ccr_finalize(lua_State *L)
{
int i;
process_t *proc;
lua_getfield(L, LUA_REGISTRYINDEX, CCR_SELF);
proc = (process_t*)lua_touserdata(L, -1);
if (proc->main)
{
for (i = 0; i < THR_SIZE; i++)
{
prc_ready.push(NULL);
}
for (list<pthread_t>::iterator thread = thr_pool.begin(); thread!=thr_pool.end(); ++thread)
{
pthread_join(*thread, NULL);
}
}
return 0;
}
示例14: ccr_spawn
static int ccr_spawn(lua_State *L)
{
process_t *proc;
const char *str = luaL_checkstring(L, 1);
proc = new process_t();
if (proc)
{
proc->main = 0;
proc->counter = 1;
proc->status = PS_READY;
proc->mbox = mbx_create();
if (proc->mbox)
{
proc->L = luaL_newstate();
if (proc->L)
{
// luaL_openlibs(proc->L);
ccr_openlibs(proc->L);
lua_pushstring(proc->L, CCR_SELF);
lua_pushlightuserdata(proc->L, proc);
lua_rawset(proc->L, LUA_REGISTRYINDEX);
if (!luaL_loadstring(proc->L, str))
{
prc_ready.push(proc);
lua_pushboolean(L, 1);
return 1;
}
cerr << "[ERROR][CREATING LUA PROCESS] " << lua_tostring(proc->L, -1) << endl;
lua_close(proc->L);
}
mbx_free(proc->mbox);
}
delete proc;
}
lua_pushboolean(L, 0);
return 1;
}
示例15: concurrent
concurrent( T t_ ) : t{t_}, thd{[=]{ while(!done) q.pop()(); }} { }