Skip to content

Instantly share code, notes, and snippets.

@taotetek
Created April 25, 2016 14:39
Show Gist options
  • Save taotetek/5aa5109354832adc449307b3a9817299 to your computer and use it in GitHub Desktop.
Save taotetek/5aa5109354832adc449307b3a9817299 to your computer and use it in GitHub Desktop.
Sharing a thread safe ZMQ_SCATTER socket between multiple threads with inproc transport - very golang channel like. :)
#include <czmq.h>
#include <pthread.h>
#define NUMTHREADS 4
#define MESSAGES 10000000
void *
sender (void *arg)
{
zsock_t *scatter = (zsock_t *) arg;
int i;
for (i=0; i<(MESSAGES/NUMTHREADS); i++) {
int rc = zstr_send (scatter, "hello");
assert ( rc == 0 );
}
return NULL;
}
int
main (int argc, char *argv [])
{
pthread_t tid[NUMTHREADS];
zsock_t *gather = zsock_new (ZMQ_GATHER);
assert (gather);
int rc = zsock_bind (gather, "inproc://channel");
assert ( rc != -1 );
zsock_t *scatter = zsock_new (ZMQ_SCATTER);
assert (scatter);
rc = zsock_connect (scatter, "inproc://channel");
assert ( rc != -1 );
int i;
for (i=0; i<NUMTHREADS; i++) {
pthread_create (&(tid[i]), NULL, &sender, scatter);
}
for (i=0; i<MESSAGES; i++) {
char *msg = zstr_recv (gather);
free (msg);
}
zsock_destroy (&scatter);
zsock_destroy (&gather);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment