Navigationskarta Insitutitionen för Datavetenskap Umeå Universitet

Kodexempel F14



/* Kolla alltid returvärden i riktig kod! */

#include <pthread.h> 
#include <stdio.h> 
 
void *printmsg(void *ptr) 
{ 
  puts((char *) ptr); 
}  
   
int main(void) 
{ 
  pthread_t thread1; 
  char *msg = "Hello, world!"; 
      
  pthread_create(&thread1, NULL, printmsg, msg);
  pthread_join(thread1, NULL); 

  return 0; 
} 


/* Funkar inte - varför? */ #include <pthread.h> #include <stdio.h> #define BUFSZ 1024 pthread_mutex_t mtx1 = PTHREAD_MUTEX_INITIALIZER; int sum=0; char buf[BUFSZ]; void *worker(void *ptr) { while (1) { pthread_mutex_lock(&mtx1); sum += atoi(buf); pthread_mutex_unlock(&mtx1); } } int main(void) { pthread_t thread1; char *msg = "Hello, world!"; pthread_create(&thread1, NULL, worker, msg); while (1) { pthread_mutex_lock(&mtx1); if (fgets(buf, BUFSZ, stdin)==NULL) break; pthread_mutex_unlock(&mtx1); } printf("Sum is %d\n", sum); return 0; }
/* Summera array. pthread.h, stdio.h */ #define NELEM 4096 #define NTHR 16 pthread_mutex_t mtx_sum; int arr[NELEM], sum=0; void *worker(void *arg) { int i, lsum=0, base_idx; base_idx = (int) arg; for (i=base_idx; i<base_idx+NELEM/NTHR; i++) lsum+=arr[i]; pthread_mutex_lock(&mtx_sum); sum += lsum; pthread_mutex_unlock(&mtx_sum); return 0; } int main(void) { pthread_t trd[NTHR]; int i; pthread_mutex_init(&mtx_sum, NULL); for (i=0; i<NELEM; i++) arr[i]=i; for (i=0; i<NTHR; i++) pthread_create(&trd[i], NULL, worker, (void *) (i*NELEM/NTHR)); for (i=0; i<NTHR; i++) pthread_join(trd[i], NULL); printf("Sum is %d\n", sum); return 0; }
#include <pthread.h> int pthread_create(pthread_t *new_thread_ID, const pthread_attr_t *attr, void *(*start_func)(void *), void *arg); int pthread_join(pthread_t target_thread, void **status); int pthread_mutex_lock(pthread_mutex_t *mp); int pthread_mutex_unlock(pthread_mutex_t *mp); int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *attr); int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize); /* m.fl m.fl... */
int isatty(int filedes); /* kolla om vi kör "direkt" eller med omdirigering */ char *ttyname(int filedes); /* kolla vart filedes "pekar" */
#include <stdio.h> #include <stdlib.h> #include <termios.h> #include <unistd.h> int main(int argc, char **argv) { char c; struct termios buf, savebuf; tcgetattr(STDIN_FILENO, &savebuf); tcgetattr(STDIN_FILENO, &buf); buf.c_lflag &= ~(ICANON | ECHO); buf.c_cc[VMIN] = 0; buf.c_cc[VTIME] = (argv[1] != NULL) ? atoi(argv[1]) : 5; tcsetattr(STDIN_FILENO, TCSANOW, &buf); printf("Enter one character: "); fflush(stdout); if ((read(STDIN_FILENO, &c, 1)) != 1) printf("\nTimeout!\n"); else printf("\nYou entered: %c.\n", c); tcsetattr (0, TCSAFLUSH, &savebuf); exit(0); }
[an error occurred while processing this directive]