0
我正在開發腳本語言以及C API,以便C程序可以與我的語言進行交互。它基於LUA的堆棧方法。然而,我遇到了兩個模塊之間的同步問題......對yyparse()調用執行操作?
在我的API的init函數上,我啓動了一個線程,對系統調用我的解釋器,以便它可以接收命令我想要它執行。我還創建了2個信號量,以便我可以(理論上)將我的API與解釋器模塊同步。我需要按以下順序完成操作:初始化解釋器 - > API發送命令 - >解釋器執行所述命令 - >等待新命令。
這裏的解釋器的主要功能:
int main(int argc, char* argv[]) {
extern FILE *yyin;
char *semRead = "/canRead";
char *semSend = "/canSend";
sem_t *canRead;
sem_t *canSend;
//this part is just so that my code will be coming through a pipe
//created by me, instead of stdin
if(argc == 1)
yyin = stdin;
else if(argc == 2){
suppress = 1;
if(strcmp(argv[1], "-s") == 0){
char *source = "/tmp/colliPipe";
mkfifo(source, 0666);
yyin = fopen(source, "w+");
}
else{
printf("Error: unknown option %s\n", argv[1]);
return -1;
}
}
else if(argc > 2){
printf("Error: too many parameters\n");
return -2;
}
#if YYDEBUG == 1
extern int yydebug;
yydebug = 1;
#endif
initTables(); //Initializing symbol tables
if(!suppress){
printf("Colli 0.0.1 - 2014");
printf(">> ");
}
canRead = sem_open(semRead, O_CREAT, 0644, 0);
canSend = sem_open(semSend, O_CREAT, 0644, 0);
sem_post(canSend);
yyparse();
return 0;
}
事情是:當我創建我的線程,我不能保證我的解析器將準備接受我的輸入。 sem_post(canSend)
用於指示解析器應該準備好獲取所述輸入,但它不起作用,因爲操作系統可以決定在發佈後但在yyparse()
之前交換進程。
問題是:我可以確保解析器已準備好在解析之前發佈到信號量?
在此先感謝!