我使用 Ubuntu Linux。当我尝试使用“usleep”函数时,我得到有关“函数 usleep 的隐式声明”的信息。下面是错误代码:
\n\nmuteks.c:70:4: warning: implicit declaration of function \xe2\x80\x98usleep\xe2\x80\x99 [-Wimplicit-function-declaration]\n usleep(300);\n ^\nRun Code Online (Sandbox Code Playgroud)\n\n源代码:
\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <time.h>\n#include <pthread.h>\n\nvoid * klientWatek (void* arg);\npthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;\nstatic int lKf = 10;\nint lKl = 15;\n\nint main ()\n{\n pthread_t *klientTab;\n int *klientTabId;\n int lKr = 1;\n int i;\n // pami\xc4\x99\xc4\x87 dla identyfikatora w\xc4\x85tku\n klientTab = (pthread_t *) malloc (lKl* sizeof (pthread_t));\n klientTabId = (int *) malloc (lKl*sizeof (int)); //pami\xc4\x99\xc4\x87 dla id\n // b\xc4\x99d\xc4\x85cego argumentem przekazywanym do funkcji\n for (i=0; i<lKl; i++) klientTabId[i]=i; //przypisanie\n\n printf("\\nOtwieramy pub (simple)!\\n");\n printf("\\nLiczba wolnych kufli %d\\n", lKf);\n\n for (i=0; i<lKl; i++)\n {\n pthread_create (&klientTab[i], NULL, klientWatek, \n &klientTabId[i]);\n }\n\n for (i=0; i<lKl; i++)\n { //w\xc4\x85tek joinable, r\xc4\x99cznie zwalniamy zasoby\n pthread_join (klientTab[i], NULL);\n }\n\n printf("\\nZamykamy pub!\\n");\n printf("\\nLiczba wolnych kufli %d\\n", lKf);\n\nvoid * klientWatek (void * argWsk)//zostanie przekazany klientTabId[i]\n{\n int mojId = * ( (int *) argWsk);\n int i,j;\n\n int pobranoKufel = 0;\n int ileMuszeWypic = 2;\n\n printf ("\\nKlient %d, wchodz\xc4\x99 do pubu\\n", mojId);\n\n for (i=0; i<ileMuszeWypic; i++)\n {\n do\n {\n pthread_mutex_lock(&mutex);\n if (lKf > 0)\n {\n printf("\\nSprawdzi\xc5\x82em, czy jest wolny kufel\\n");\n lKf--;\n pobranoKufel = 1;\n printf("\\nWzi\xc4\x85\xc5\x82em kufel\\n");\n }\n\n pthread_mutex_unlock(&mutex);\n } while (pobranoKufel == 0);\n printf("\\nKlient %d, wybieram kufel\\n", mojId);\n\n j=0;\n printf("\\nKlient %d, nalewam z kranu %d\\n", mojId, j);\n usleep(300);\n\n printf("\\nKlient %d, pije\\n", mojId);\n nanosleep((struct timespec[]){{0, 500000000L}},NULL);\n\n printf("\\nKlient %d, odkladam kufel\\n", mojId);\n\n if (pobranoKufel == 1)\n {\n pthread_mutex_lock(&mutex);\n pobranoKufel=0;\n lKf++;\n pthread_mutex_unlock(&mutex);\n }\n }\n printf("\\nKlient %d, wychodz\xc4\x99 z pubu\\n", mojId);\n\n return (NULL);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试编译程序的方式:
\n\ngcc -Wall -pedantic -std=gnu99 -pthread muteks.c -o przyklad\nRun Code Online (Sandbox Code Playgroud)\n\n我现在应该做什么来编译它?
\nusleep()unistd.h在您尚未包含的标准标头中声明。包括它:
#include <unistd.h>
Run Code Online (Sandbox Code Playgroud)
相关说明:usleep()自 POSIX-2008 以来已被删除,建议使用nanosleep()。