Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [3853,140124152944384] as
- [3853,140124152944392] gi
- [3853,140124152944388] yo
- [3853,140124152944384] as
- [3853,140124152944392] gi
- [3853,140124152944388] yo
- #include <pthread.h>
- #include <stdio.h>
- #include "util.h"
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- struct arg_holder {
- int reps;
- char * argv;
- int argcc;
- };
- pthread_mutex_t lock;
- pthread_cond_t cond;
- int q=2;
- int counter=0;
- void *disp(void *param) {
- struct arg_holder *my_arg;
- my_arg = (struct arg_holder *) param;
- int myreps = my_arg->reps;
- char *myargv = my_arg->argv;
- int argccc = my_arg->argcc;
- pthread_mutex_lock(&lock);
- init();
- counter++;
- pthread_mutex_unlock(&lock);
- while(counter==argccc-2){
- pthread_cond_signal(&cond);
- }
- for(int i=0;i<myreps;i++){
- pthread_mutex_lock(&lock);
- pthread_cond_wait(&cond,&lock);
- display(myargv);
- pthread_mutex_unlock(&lock);
- }
- return NULL;
- }
- int main(int argc, char* argv[])
- {
- if(argc<3) {printf("Nopen"); exit(1); } // Segmentation Fault
- int rep = atoi(argv[1]); // Number of repetitions
- if (pthread_mutex_init(&lock, NULL) != 0)
- {
- perror("n mutex init failedn");
- exit(1);
- }
- if (pthread_cond_init(&cond, NULL) != 0) {
- perror("pthread_cond_init() error");
- exit(1);
- }
- struct arg_holder thread_data_array[argc-2];
- pthread_t threads[argc-2];
- for(int i = 0; i < argc-2; i++) {
- thread_data_array[i].reps=rep;
- thread_data_array[i].argv=argv[q];
- thread_data_array[i].argcc=argc;
- int err = pthread_create(&threads[i], NULL, disp,(void *) &thread_data_array[i]);
- if (err != 0)
- printf("ncan't create thread :");
- q++;
- }
- for(int i = 0; i < argc-2; i++) {
- pthread_join(threads[i], NULL);
- }
- pthread_mutex_destroy(&lock); // Destroy mutex
- pthread_cond_destroy(&cond); // Destroy cond variable
- return 0;
- }
Add Comment
Please, Sign In to add comment