我在windows下用事件处理线程间的同步,调用的函数如下:
hHandle = CreateEvent(...);
SetEvent(hHandle);
WaitForSingleObject(hHandle,...)
CloseHandle(hHandle);//例子如下:
线程A:
.....
SetEvent(hHandle,...);......线程B;....
WaitForSingleObject(hHandle,...);
//如果等到信号,程序往下执行,否者等待直到超时...
CloseHandle(hHandle);如何在unix下用对应的函数代替上面的函数?请给出思路或是与上面类似的代码。

解决方案 »

  1.   

    关注, Unix下不熟, 所以一定要看看.
      

  2.   

    pthread_cond_signal
    pthread_cond_wait
      

  3.   

    这是我在WIN2K下的一个东东,希望对兄弟有点用!
    #include<windows.h>
    #include<iostream.h>int count;
    int i=0;
    HANDLE ThreadHandle[100];  //&Iuml;&szlig;&sup3;&Igrave;&frac34;&auml;±ú&iexcl;&pound;
    DWORD ThreadId[100];      //&Iuml;&szlig;&sup3;&Igrave;Id&ordm;&Aring;&iexcl;&pound;//&Iuml;&szlig;&sup3;&Igrave;&ordm;&macr;&Ecirc;&yacute;
    void f1(int i)
    {
     cout<<"&micro;&Uacute;"<<i<<"&cedil;&ouml;&Iuml;&szlig;&sup3;&Igrave;&micro;&Auml;ID&ordm;&Aring;&Ecirc;&Ccedil;:" <<GetCurrentThreadId()
     <<endl;
     
    }//&Iuml;&szlig;&sup3;&Igrave;&ordm;&macr;&Ecirc;&yacute;
    void f2(int i)
    {
     cout<<"&micro;&Uacute;"<<i<<"&cedil;&ouml;&Iuml;&szlig;&sup3;&Igrave;&micro;&Auml;ID&ordm;&Aring;&Ecirc;&Ccedil;:" <<GetCurrentThreadId()
     <<endl;
     
    }//&Iuml;&szlig;&sup3;&Igrave;&ordm;&macr;&Ecirc;&yacute;
    void f3(int i)
    {
     cout<<"&micro;&Uacute;"<<i<<"&cedil;&ouml;&Iuml;&szlig;&sup3;&Igrave;&micro;&Auml;ID&ordm;&Aring;&Ecirc;&Ccedil;:" <<GetCurrentThreadId()
     <<endl;
     
    }//&Iuml;&szlig;&sup3;&Igrave;&ordm;&macr;&Ecirc;&yacute;
    void f4(int i)
    {
     cout<<"&micro;&Uacute;"<<i<<"&cedil;&ouml;&Iuml;&szlig;&sup3;&Igrave;&micro;&Auml;ID&ordm;&Aring;&Ecirc;&Ccedil;:" <<GetCurrentThreadId()
     <<endl;
     
    }void parbegin(void *f,void *f1,void *f2,void *f3)//&Iuml;&szlig;&sup3;&Igrave;&acute;&acute;&frac12;¨&pound;&not;&Ograve;ò&Icirc;&ordf;PARBEGIN&micro;&Auml;&sup1;&brvbar;&Auml;&Uuml;&Ecirc;&Ccedil;&sup2;ú&Eacute;ú&Ograve;&raquo;×é&sup2;&cent;·&cent;&Iuml;&szlig;&sup3;&Igrave;&pound;&not;&sup2;&raquo;&Auml;&Uuml;&Oacute;&Atilde;&Ograve;&raquo;&Ntilde;&shy;&raquo;·&acute;&acute;&frac12;¨&Euml;ù&Oacute;&ETH;&Iuml;&szlig;&sup3;&Igrave;&iexcl;&pound;
    {
    ThreadHandle[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)f,(LPVOID)i,0,&ThreadId[i]);//&acute;&acute;&frac12;¨&Iuml;&szlig;&sup3;&Igrave;
    i++;
    ThreadHandle[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)f1,(LPVOID)i,0,&ThreadId[i]);//&acute;&acute;&frac12;¨&Iuml;&szlig;&sup3;&Igrave;
    i++;
    ThreadHandle[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)f2,(LPVOID)i,0,&ThreadId[i]);//&acute;&acute;&frac12;¨&Iuml;&szlig;&sup3;&Igrave;
    i++;
    ThreadHandle[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)f3,(LPVOID)i,0,&ThreadId[i]);//&acute;&acute;&frac12;¨&Iuml;&szlig;&sup3;&Igrave;
    i++;
    }void parend()
    {  
        WaitForMultipleObjects(count,ThreadHandle,true,100);//&micro;&Egrave;&acute;&yacute;&sup2;&cent;·&cent;&Iuml;&szlig;&sup3;&Igrave;&Iacute;ê&sup3;&Eacute;
    }
    void main()
    {
       count=4;
       cout<<"&sup2;&cent;·&cent;&Iuml;&szlig;&sup3;&Igrave;&iquest;&ordf;·&cent;&pound;&ordm;\n";
       parbegin(f1,f2,f3,f4);                    //&sup2;&cent;·&cent;&Iuml;&szlig;&sup3;&Igrave;&iquest;&ordf;&Ecirc;&frac14;&iexcl;&pound;
       parend();                                 //&Iuml;&szlig;&sup3;&Igrave;&ordm;&Iuml;&sup2;&cent;&iexcl;&pound;
       cout<<"&Euml;ù&Oacute;&ETH;&Iuml;&szlig;&sup3;&Igrave;&ordm;&Iuml;&sup2;&cent;!"<<endl;
    }