Sponsored Content
Full Discussion: Mutex will not work
Top Forums Programming Mutex will not work Post 302287952 by ChrisWilliams on Monday 16th of February 2009 05:00:03 AM
Old 02-16-2009
Mutex will not work

I am trying to use mutex in my multi-tread project, but they don't seem to work.
I have created a simple demonstration of the problem. This is NOT how I would use a mutex, only a demonstration of the problem:
Code:
#include <stdio.h>
#include <pthread.h>
int main()
{
    int val;
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    
    printf("Test of mutex\n");
    val = pthread_mutex_lock(&mutex);
    printf("Lock 1 returned %d\n",val);
    val = pthread_mutex_lock(&mutex);
    printf("Lock 2 returned %d\n",val);

    val = pthread_mutex_trylock(&mutex);
    printf("Lock 3 returned %d\n",val);

    return(0);
    
}

Basically, I have a mutex which I lock. It returns 0, its OK.
I then try to lock it a second time. It should block (I think). The program comes straight back with val = 0?

There is also a compilation problem:

The call pthread_mutex_trylock() will compile OK (it is prototyped in pthread.h)
but it will not link! It says 'undefined reference'

It has to be commented out for the program to run.

I am running ubuntu, and GCC - v gives the following:

Code:
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.2-1ubuntu12' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu12)

I am sorry for the length of the post, but I wanted to get the relevant facts.

Can anybody see where I have gone wrong?

Thanks in advance.

Chris.

Last edited by Franklin52; 02-16-2009 at 08:00 AM.. Reason: adding code tags
 

10 More Discussions You Might Find Interesting

1. Programming

Threads and Mutex

Hi all, I am working in a UNIX/C environment. I would like to understand more about MUTEX and Threads. Can someone explain me these concepts and how they are related. Vijay (2 Replies)
Discussion started by: vthasan
2 Replies

2. UNIX for Dummies Questions & Answers

mutex

Can anyone explain me what mutexes are in multithreading environment? (2 Replies)
Discussion started by: sagar
2 Replies

3. Shell Programming and Scripting

mutex in shell programing

A shell in crontab per 5 min write a file B shell in crontab per 6 min read a file how to lock the share file a ;avioid confilict in write and read? Thx : -) (1 Reply)
Discussion started by: zz_xm
1 Replies

4. Programming

How to handle mutex lock?

Hi, I have two tasks 'Read' and 'Write' which reads and writes on a file "abc.txt" respectively. Now I need to restrict the Write operation on the file while Read is going on, But can allow two Reads at a time. ie. two Reads can happen simultaneously, but Write can't happen at Read is going on. ... (3 Replies)
Discussion started by: satheeshalle
3 Replies

5. Programming

difference between Mutex and semaphores

Hi, can someone explain me the difference between mutex and semaphores? Thanks (1 Reply)
Discussion started by: rvan
1 Replies

6. UNIX for Dummies Questions & Answers

what is diff b/w semaphore and mutex

can u tell me what is the exact difference b/w mutex and semaphore and what is the diff b/w counting semaphore and binary semaphore amit (1 Reply)
Discussion started by: amitpansuria
1 Replies

7. Shell Programming and Scripting

Mutex in Perl

Hello Everyone, I just joined this forum and this is my first post. I would like to know how can I impliment basic read/write locks in perl. I have a database (file) which can be accessed simultaneously but has to be locked while writing. If there is no such support in perl, my next... (6 Replies)
Discussion started by: superuser84
6 Replies

8. Programming

Mutex lock question

Hi all, I have a scenario where I need to use the mutex locks. The mutex locks are working fine, but sometimes I am getting into the dead lock situation. Below is the summary of my code : MUTEX LOCK performTask(); MUTEX UNLOCK. In some cases I get into the situation where... (2 Replies)
Discussion started by: cjjoy
2 Replies

9. Programming

pthread and mutex question

Hello, I have got some issue with the struct variable with passed arguments the variable in the sturct is only recognize the last value their assigned to I'm pretty confused why the mutex didn't work out here is my program: #include<stdio.h> #include<pthread.h> pthread_mutex_t lock... (3 Replies)
Discussion started by: michael23
3 Replies

10. Programming

Can Mutex be replaced with anything?

Hi All, To avoid race condition, instead of using mutex, semaphore, spinlock etc.... Is there any other mechanism by which we can avoid race condition in an multi-threading environment. -Thanks (6 Replies)
Discussion started by: rvan
6 Replies
pthread_mutex_unlock(3T)												  pthread_mutex_unlock(3T)

NAME
pthread_mutex_unlock() - unlock a mutex. SYNOPSIS
PARAMETERS
mutex Pointer to the mutex to be unlocked. DESCRIPTION
The function is called by the owner of the mutex referenced by mutex to unlock the mutex. The manner in that the mutex is released is dependent upon the mutex's type attribute. For normal and default mutexes, undefined behavior will result if is called on an unlocked mutex or by a thread that is not the current owner. For recursive and error-checking mutexes, an error is returned if is called on an unlocked mutex or by a thread which is not the current owner. For recursive mutexes, the owner must call as many times as the mutex was locked before another thread can lock the mutex. If there are threads blocked on the mutex referenced by mutex when releases the mutex, the scheduling policy is used to determine which thread will acquire the mutex next. RETURN VALUE
Upon successful completion, returns zero. Otherwise, an error number is returned to indicate the error (the variable is not set). ERRORS
For each of the following conditions, if the condition is detected, the function returns the corresponding error number: [EINVAL] mutex is not an initialized mutex. [EPERM] The calling thread does not own mutex. On HP-UX, this error is not detected for or mutexes. [EFAULT] mutex parameter points to an illegal address. AUTHOR
was derived from the IEEE POSIX P1003.1c standard and HP extensions. SEE ALSO
pthread_mutex_init(3T), pthread_mutex_destroy(3T), pthread_mutex_lock(3T), pthread_mutex_trylock(3T). STANDARDS CONFORMANCE
Pthread Library pthread_mutex_unlock(3T)
All times are GMT -4. The time now is 06:32 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy