Read the "Fast mutual exclusion for uniprocessors" paper.
Assignment
Assume you are giving the following code for an implementation of a list:
struct List {
int data;
struct List *next;
};
List *list = 0;
insert(int data) {
List *l = new List;
l->data = data;
l->next = list;
list = l;
}
fn() {
insert(100);
}
main() {
thread_create(..., fn);
thread_create(..., fn);
thread_schedule();
}
In this code multiple threads insert into a list concurrently.
Will this code work correctly?
Give an implementation of insert using restartable atomic sequences? (Please hand in your answer at the beginning of lecture.)