| | |
| | | #define NTHREADS 4 |
| | | struct Targ targs[NTHREADS]; |
| | | size_t qsize = 16; |
| | | |
| | | bool stop = false; |
| | | void sigint_handler(int sig) { |
| | | cerr << "sigint_handler" << endl; |
| | | mm_destroy(); |
| | | exit(0); |
| | | |
| | | stop = true; |
| | | } |
| | | |
| | | void* run (void *arg) { |
| | |
| | | struct Targ * targ = (struct Targ * )arg; |
| | | // cerr << "productor key="<<targ->key << endl; |
| | | err_msg(0, "productor key = %d\n", targ->key ); |
| | | //SLinkedLockFreeQueue<struct Item> *queue = QFactory::createLinkedLockFreeQueue<struct Item> (targ->key, 10); |
| | | //SArrayLockFreeQueue<struct Item> *queue = QFactory::createArrayLockFreeQueue<struct Item> (targ->key, 10); |
| | | |
| | | LockFreeQueue<struct Item> *queue = QueueFactory::createQueue<struct Item> (targ->key, qsize); |
| | | // LockFreeQueue<struct Item> *queue = QueueFactory::createQueue<struct Item> (targ->key, qsize); |
| | | SHMQueue<struct Item> *queue = new SHMQueue<struct Item>(targ->key, qsize); |
| | | /* Transfer blocks of data from stdin to shared memory */ |
| | | int end = targ->end; |
| | | struct Item item; |
| | |
| | | |
| | | item.pic = i; |
| | | item.info = i; |
| | | while((end == -1 || (i < end) ) && (queue->push(item)) ) { |
| | | while(!stop && (end == -1 || (i < end) ) && (queue->push(item)) ) { |
| | | item.pic = i; |
| | | item.info = i; |
| | | printf("productor(%d) 入队:{%d, %d}\n", targ->key, item.pic, item.info); |
| | |
| | | i++; |
| | | |
| | | } |
| | | delete queue; |
| | | return (void *)i; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | //destroy(); |
| | | mm_destroy(); |
| | | cerr << "productor quit" << endl; |
| | | exit(EXIT_SUCCESS); |
| | | } |