KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've noticed that I take a pretty big performance hit when I have an algorithm that locks and unlocks a thread ALOT. Is there any way to help this overhead? Would using a semaphore be more/less efficient? Thanks typedef struct _treenode{ struct _treenode *leftNode; struct _treenode *rightNode; int32_t data; pthread_mutex_t mutex; }TreeNode; pthread_mutex_t _initMutex = PTHREAD_MUTEX_INITIALIZER; int32_t insertNode(TreeNode **_trunk, int32_t data){ TreeNode **current; pthread_mutex_t *parentMutex = NULL, *currentMutex = &_initMutex; if(_trunk != NULL){ current = _trunk; while(*current != NULL){ pthread_mutex_lock(&(*current)->mutex); currentMutex = &(*current)->mutex; if((*current)->data < data){ if(parentMutex != NULL) pthread_mutex_unlock(parentMutex); pthreadMutex = currentMutex; current = &(*current)->rightNode; }else if((*current)->data > data){ if(parentMutex != NULL) pthread_mutex_unlock(parentMutex); parentMutex = currentMutex; current = &(*current)->leftNode; }else{ pthread_mutex_unlock(currentMutex); if(parentMutex != NULL) pthread_mutex_unlock(parentMutex); return 0; } } *current = malloc(sizeof(TreeNode)); pthread_mutex_init(&(*current)->mutex, NULL); pthread_mutex_lock(&(*current)->mutex); (*current)->leftNode = NULL; (*current)->rightNode = NULL; (*current)->data = data; pthread_mutex_unlock(&(*current)->mutex); pthread_mutex_unlock(currentMutex); }else{ return 1; } return 0; } int main(){ int i; TreeNode *trunk = NULL; for(i=0; i<1000000; i++){ insertNode(&trunk, rand() % 50000); } }
Tags (comma-separated)
Save Edits
Cancel