Coder Social home page Coder Social logo

lqueue's Introduction

C11 + Pthreads Atomic Bounded Work Queue

This is a small library providing a single-writer, multiple-reader lock-free queue (lqueue) using C11's stdatomic.h features. This queue wrapped in a multi-threaded work queue (wqueue) using POSIX threads and semaphores. Jobs in the form of function pointers / argument tuples are submitted to the queue and completed by the queue's threads, blocking as necessary when the queue is full.

struct sha1_job {
    char message[64];
    char hash[SHA1_DIGEST_SIZE * 2 + 1];
};

static void
sha1_worker(int thread_id, void *arg)
{
    /* ... compute hashes ... */
}

void
sha1_compute_all(void)
{
    int nthreads = sysconf(_SC_NPROCESSORS_ONLN);
    wqueue *queue = wqueue_create(50, nthreads);
    struct sha1_job jobs[400];
    for (unsigned i = 0; i < countof(jobs); i++) {
        sprintf(jobs[i].message, "hello%06d", i);
        wqueue_add(queue, sha1_worker, &jobs[i]);
    }
    wqueue_wait(queue); // wait for full job completion
    /* ... process results and/or queue more jobs ... */
    wqueue_free(queue);
}

lqueue's People

Contributors

skeeto avatar

Watchers

James Cloos avatar skyformat99 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.