Thread: Mutex across multiple source files

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User
    Join Date
    May 2004
    Posts
    19
    That's why i think it's a gcc problem, if i move the function to it's original place everything works!

    I was wondering if there something lika a -mutex-across-multiple-source-files i should pass to gcc.

  2. #2
    Kernel hacker
    Join Date
    Jul 2007
    Location
    Farncombe, Surrey, England
    Posts
    15,677
    No, it's not gcc's fault - or anyone elses. You are passing a COPY of the mutex to "function" - this mutex is NOT the same one that you were using in the other code.

    It's not because you are using multiple files, but simply that you are copying an existing mutex, and making it a different mutex.

    Code:
    void function(pthread_mutex_t *mut) {
        pthread_mutex_lock(mut);
        printf("This shows up if function is in the same source file as the calling code.");
        pthread_mutex_unlock(mut);
    }
    ...
    function(&mut);
    should work.


    --
    Mats
    Compilers can produce warnings - make the compiler programmers happy: Use them!
    Please don't PM me for help - and no, I don't do help over instant messengers.

  3. #3
    Registered User
    Join Date
    May 2004
    Posts
    19
    It's more complicated that that. I simplified the example...

    I'm passing this structure:

    Code:
    typedef struct {        /* Country mutex structure */
            pthread_mutex_t resA, resE, resP, resM;
            pthread_mutex_t purchase1, purchase2;
    } CountryMutex;
    Into this function:
    Code:
     
    void findDeficit(const Config *config, const CountryStruct *country, CountryDeficit *cdeficit, CountryMutex *cmutex) {
    pthread_mutex_lock(&cmutex->resA);
    ...
    pthread_mutex_unlock(&cmutex->resA);
    }
    Using this call:
    Code:
    CountryMutex cmutex;
    pthread_mutex_init(&cmutex.resA, NULL);
    pthread_mutex_init(&cmutex.resE, NULL);
    pthread_mutex_init(&cmutex.resP, NULL);
    pthread_mutex_init(&cmutex.resM, NULL);
    
    findDeficit(config, country, cdeficit, &cmutex);   << EDIT
    Shouldn't this work? Passing a pointer to a structure of mutexes?
    Last edited by Quasar; 12-04-2007 at 07:58 AM. Reason: Wrong code

  4. #4
    Kernel hacker
    Join Date
    Jul 2007
    Location
    Farncombe, Surrey, England
    Posts
    15,677
    Your calling code doesn't look like it's passing pointers, so I'm not sure if it's at all working - but yes, passing a structure pointer that contains mutexes should work. The point is that you can't make copies of a mutex and still think that it's the same mutex.

    --
    Mats
    Compilers can produce warnings - make the compiler programmers happy: Use them!
    Please don't PM me for help - and no, I don't do help over instant messengers.

  5. #5
    Registered User
    Join Date
    May 2004
    Posts
    19
    Sorry, missing &.

    Still the same problem, argh...

    Rebooting the server, maybe that works.

  6. #6
    Kernel hacker
    Join Date
    Jul 2007
    Location
    Farncombe, Surrey, England
    Posts
    15,677
    Quote Originally Posted by Quasar View Post
    Sorry, missing &.

    Still the same problem, argh...

    Rebooting the server, maybe that works.
    Rebooting the server doesn't sound like the right thing - mutexes should be "infinite" resources [as in, they are only limited by amount of memory, so if you can create the mutex itself, you can use the mutex].

    --
    Mats
    Compilers can produce warnings - make the compiler programmers happy: Use them!
    Please don't PM me for help - and no, I don't do help over instant messengers.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Multiple source files in one project
    By mintsmike in forum C++ Programming
    Replies: 8
    Last Post: 06-27-2009, 07:20 AM
  2. Confusion on header and source files
    By dnguyen1022 in forum C++ Programming
    Replies: 4
    Last Post: 01-17-2009, 03:42 AM
  3. Working with multiple source files
    By abh!shek in forum C Programming
    Replies: 17
    Last Post: 06-03-2008, 11:23 AM
  4. Multiple Source Files!?!?
    By Padawan in forum C Programming
    Replies: 14
    Last Post: 04-04-2004, 12:19 AM
  5. Replies: 1
    Last Post: 05-01-2003, 02:52 PM