This is my test program.I use g++ to compile code and expect it to block when the function void foo() is executed, but it don't block . I don't know what is wrong?  I use gcc to compile code, it can block. who can tell me difference.
#include <pthread.h>
#include <iostream>
using namespace std;
static pthread_mutex_t mutex;
void foo()
{
    pthread_mutex_lock(&mutex);
    cout<<"this is foo()"<<endl;
    pthread_mutex_unlock(&mutex);
}
void bar()
{
    pthread_mutex_lock(&mutex);
    cout<<"this is bar()"<<endl;
    foo();
    pthread_mutex_unlock(&mutex);
}
  int main()
 {
    pthread_mutex_init(&mutex, NULL);
    bar();
    return 0;
 }
exepect output
this is bar()
actual output:
this is bar()
this is foo()
 
    