|
OBECNI NA TPC |
|
|
» PeKa 06:38 » cVas 06:33 » NimnuL 06:15 » NWN 05:07 » Shark20 02:49
Dzisiaj przeczytano 41103 postów, wczoraj 25974
Szybkie ładowanie jest: włączone.
|
|
|
|
|
|
TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
[Wątki][C++] Dziś dla odmiany pytanie o semafory , Barts_706 19/06/08 14:15 A więc tak, po kolei. Kawałek kodu:
const int PROJ_ID = 213;
std::string pPath(getenv ("TMP"));
pPath = pPath + "/server.ctrl.file";
std::cout << pPath << std::endl ;
const char *semFileName = pPath.c_str() ;
FILE *myFile = fopen(semFileName, "w");
fclose(myFile);
key_t my_key = ftok(semFileName, PROJ_ID);
log << my_key << LOG_ENDLINE;
int semSetId = semget(my_key, 1, O_RDWR | IPC_CREAT);
// int semSetId = semget(my_key, 1, 0666 | IPC_CREAT);
// to też próbowałem
log << semSetId << LOG_ENDLINE;
semctl(semSetId, 0, SETVAL, 0);
if (semSetId == -1)
{
log << "Unable to create semaphore set." << LOG_ENDLINE;
}
log << "Trying to sync on semaphore." << LOG_ENDLINE;
struct sembuf semBuf[2];
semBuf[0].sem_num = 0;
semBuf[0].sem_op = 0;
semBuf[0].sem_flg = SEM_UNDO;
semBuf[1].sem_num = 0;
semBuf[1].sem_op = 1;
semBuf[1].sem_flg = SEM_UNDO;
if ( semop(semSetId, semBuf, sizeof(semBuf) / sizeof(semBuf[0])) != 0 )
{
log << "Unable to set up semaphore." << LOG_ENDLINE;
perror("semop");
}
else
{ coś tam robimy
No i niestety wynik taki:
/tmp/server.ctrl.file
06-19 07:10:39 [409ff970] INFO -721272347
06-19 07:10:39 [409ff970] INFO 262149
06-19 07:10:39 [409ff970] INFO Trying to sync on semaphore.
06-19 07:10:39 [409ff970] INFO Unable to set up semaphore.
semop: Permission denied
Ktoś wie czemu? Semctl jest, uprawnienia były nadane, a semafor nie bangla.
Jeśli ktoś się zna trochę na programowaniu wielowątkowym, to będę wdzięczny za wsparcie._______________________________
http://jawnesny.pl - hmm , recydywista 19/06/08 14:44
semctl(semSetId, 0, SETVAL, 0); - ostatnim argumentem nie powinna być unia semun ?
tablica semBuf wygląda podejrzanie, najpierw czekasz na zero (po co, chyba domyślnie senval jest równe 0) ?
Wygląda na to że proces nie ma uprawnień do semaforu. upewnij się że ten semafor jest utworzony od nowa. Spróbuj int semSetId = semget(my_key, 1, O_RDWR | IPC_CREAT | IPC_EXCL);
Adekwatny kawałek mana:
If sem_op is a positive integer, the operation adds this value to the semaphore value
(semval). Furthermore, if SEM_UNDO is specified for this operation, the system updates
the process undo count (semadj) for this semaphore. This operation can always proceed
— it never forces a process to wait. The calling process must have alter permission on
the semaphore set.Computers are useless. They can only
give you
answers. - dzięki , Barts_706 19/06/08 15:36
potestuję_______________________________
http://jawnesny.pl
- btw , recydywista 19/06/08 16:17
jakiego loggera używasz ? i czy jest thread-safe ?Computers are useless. They can only
give you
answers. - zmodyfikowany log4cpp , Barts_706 19/06/08 16:24
jest oki_______________________________
http://jawnesny.pl
- hmm , waski 19/06/08 16:34
Nie byloby wygodniejsze skorzystanie z gotowych bibliotek do tego dostepnych w boost?
Poki co wszystko z czego zdarzylo mi sie uzywac z boosta bylo naprawde wygodne, ale semaforami sie nie bawilem jeszcze :)SNAFU
Situation Normal, All Fucked Up - hmm , recydywista 19/06/08 16:47
a próbowałeś użyc BGL (boost graph library) ? bo jak dla mnie to jest po prostu nieużywalne :)Computers are useless. They can only
give you
answers.
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|