#include <stdio.h> // provides printf, which is thread-safe
#include <pthread.h> // provides pthread_t type, thread functions
static void *recharge(void *args) {
printf("I recharge by spending time alone.\n"); // printf is thread-safe
return NULL;
}
static const size_t kNumIntroverts = 6;
int main(int argc, char *argv[]) {
printf("Let's hear from %zu introverts.\n", kNumIntroverts);
pthread_t introverts[kNumIntroverts];
for (size_t i = 0; i < kNumIntroverts; i++)
pthread_create(&introverts[i], NULL, recharge, NULL);
for (size_t i = 0; i < kNumIntroverts; i++)
pthread_join(introverts[i], NULL);
printf("Everyone's recharged!\n");
return 0;
}
static const char *kExtroverts[] = {
"Albert Chon",
"John Carlo Buenaflor",
"Jessica Guo",
"Lucas Ege",
"Sona Allahverdiyeva",
"Yun Zhang",
"Tagalong Introvert Jerry Cain"
};
static const size_t kNumExtroverts = sizeof(kExtroverts)/sizeof(kExtroverts[0]) - 1;
static void *recharge(void *args) {
const char *name = kExtroverts[*(size_t *)args];
printf("Hey, I'm %s. Empowered to meet you.\n", name);
return NULL;
}
int main() {
printf("Let's hear from %zu extroverts.\n", kNumExtroverts);
pthread_t extroverts[kNumExtroverts];
for (size_t i = 0; i < kNumExtroverts; i++)
pthread_create(&extroverts[i], NULL, recharge, &i);
for (size_t j = 0; j < kNumExtroverts; j++)
pthread_join(extroverts[j], NULL);
printf("Everyone's recharged!\n");
return 0;
}Here are a few (clearly broken) sample runs:
poohbear@myth12:$ ./confused-extroverts
Let's hear from 6 extroverts.
Hey, I'm John Carlo Buenaflor. Empowered to meet you.
Hey, I'm Jessica Guo. Empowered to meet you.
Hey, I'm Sona Allahverdiyeva. Empowered to meet you.
Hey, I'm Sona Allahverdiyeva. Empowered to meet you.
Hey, I'm Yun Zhang. Empowered to meet you.
Hey, I'm Tagalong Introvert Jerry Cain. Empowered to meet you.
Everyone's recharged!
poohbear@myth12:$ ./confused-extroverts
Let's hear from 6 extroverts.
Hey, I'm Sona Allahverdiyeva. Empowered to meet you.
Hey, I'm Tagalong Introvert Jerry Cain. Empowered to meet you.
Hey, I'm Tagalong Introvert Jerry Cain. Empowered to meet you.
Hey, I'm Tagalong Introvert Jerry Cain. Empowered to meet you.
Hey, I'm Tagalong Introvert Jerry Cain. Empowered to meet you.
Hey, I'm Tagalong Introvert Jerry Cain. Empowered to meet you.
Everyone's recharged!
poohbear@myth12:$static const char *kExtroverts[] = {
"Albert Chon",
"John Carlo Buenaflor",
"Jessica Guo",
"Lucas Ege",
"Sona Allahverdiyeva",
"Yun Zhang",
"Tagalong Introvert Jerry Cain"
};
static const size_t kNumExtroverts = sizeof(kExtroverts)/sizeof(kExtroverts[0]) - 1;
static void *recharge(void *args) {
const char *name = args;
printf("Hey, I'm %s. Empowered to meet you.\n", name);
return NULL;
}
int main() {
printf("Let's hear from %zu extroverts.\n", kNumExtroverts);
pthread_t extroverts[kNumExtroverts];
for (size_t i = 0; i < kNumExtroverts; i++)
pthread_create(&extroverts[i], NULL, recharge, (void *) kExtroverts[i]);
for (size_t i = 0; i < kNumExtroverts; i++)
pthread_join(extroverts[i], NULL);
printf("Everyone's recharged!\n");
return 0;
}poohbear@myth12:$ ./extroverts
Let's hear from 6 extroverts.
Hey, I'm Albert Chon. Empowered to meet you.
Hey, I'm Jessica Guo. Empowered to meet you.
Hey, I'm Sona Allahverdiyeva. Empowered to meet you.
Hey, I'm Yun Zhang. Empowered to meet you.
Hey, I'm Lucas Ege. Empowered to meet you.
Hey, I'm John Carlo Buenaflor. Empowered to meet you.
Everyone's recharged!
poohbear@myth12:$ ./extroverts
Let's hear from 6 extroverts.
Hey, I'm Albert Chon. Empowered to meet you.
Hey, I'm John Carlo Buenaflor. Empowered to meet you.
Hey, I'm Jessica Guo. Empowered to meet you.
Hey, I'm Lucas Ege. Empowered to meet you.
Hey, I'm Sona Allahverdiyeva. Empowered to meet you.
Hey, I'm Yun Zhang. Empowered to meet you.
Everyone's recharged!
poohbear@myth12:$