在创建线程安全的ArrayList时,我应该锁定哪些方法

时间:2017-04-27 23:14:40

标签: c multithreading arraylist race-condition

我使用以下方法在c中创建一个ArrayList。

//Creates a new list with each object being dataSize
ArrayList* newList(int dataSize);

//adds an element to the list
int add(ArrayList *list, void* data);

//returns the index of an element
int getIndex(ArrayList *list, void* data);

//returns the element at the given index
void* getData(ArrayList *self, int index);

//Removes the given data from the list and shifts the list to the left
bool removeData(ArrayList *list, void *data);

//Removes the data at the index from the list and shifts the list to the left
void *remove_index_al(ArrayList *list, int index);

//Frees the list
void freeList(ArrayList *list);

//resizes the list
static bool resize(ArrayList* list)

我希望通过添加

来使我的arraylist线程安全
pthread_mutex_lock(&self->mutex);

pthread_mutex_unlock(&self->mutex);

在每种方法的开头和结尾。

但是,我并不想将它们添加到每个方法中。我只想在需要的地方添加它们。为了防止竞争条件,需要锁定和解锁哪些方法?

目前我已调整大小并添加锁定,但我认为我不需要锁定newList。我是否需要锁定和解锁所有其他方法以确保同步?

0 个答案:

没有答案