/* 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]