Synchronization
This is the idea of a mutex, keep the other person out while you do your thing.
So this is a semaphore.
Lol jk, this is a real semaphore
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
Semamore sem;
Stack s; //Thread Safe Stack
void* transaction_listener(void*arg) {
while(1) {
semm_wait(&sem);
stack_push(&s, get_transaction());
}
}
void* transaction_verifier(void*useless) {
while(1) {
semm_post(&sem);
transaction = stack_pop(&s);
verify(transaction);
}
}
int main() {
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, transaction_listener, NULL);
pthread_create(&tid2, NULL, transaction_verifier, NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
exit(0);
}
typedef struct {
int value, max_value;
pthread_mutext_t m;
pthread_cond_t cv;
} Semamore;
if(!condition)
pthread_cond_wait(&cv, &mutex);
What is wrong with the code above?
What does a barrier look like? Glad you asked.
void * entry_point(void *arg)
{
int rank = (int)arg;
for(int row in thread_range)
for(int col = 0; col < COLS; ++col)
DotProduct(row, col, initial_matrix, final_matrix);
// Make Sure the Threads stop before moving on
int rc = pthread_barrier_wait(&barr);
//Check for error
if(rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD)
{
printf("Could not wait on barrier\n");
exit(-1);
}
for(int row in thread_range)
for(int col = 0; col < COLS; ++col)
DotProduct(row, col, final_matrix, initial_matrix);
}
Please read the wikibook about this!
Remember CS125/225! Appending to the head of a linked list and other edge cases etc…