zu verwenden Ich mache C-Programm in Linux. Ich habe einen Haupt-Thread, der ständig Werte von zwei Variablen aktualisiert, und ein anderer Thread schreibt diese Variablenwerte alle 20 Millisekunden in eine Datei. Ich habe usleep benutzt, um dieses Zeitintervall zu erreichen. Beispielcode ist unten.Ist es geeignet, usleep als Timer in c
main()
{
.
.
.
.
.
pthread_create(...write_file..); /* started another thread by passing a function write_file */
while(variable1)
{
updates value of variables
}
return 0;
}
void write_file()
{
.
.
.
.
fp = fopen("sample.txt" , "a");
while(variable2)
{
fprintf(fp," %d \n", somevariable);
usleep(20 * 1000);
}
fclose(fp);
}
Ist es geeignet zu verwenden usleep Funktion 20 Millisekunden Zeitintervall erreichen oder sollte ich einige andere Methoden wie Timer.? Ist das usleep genau genug? Beeinflusst diese Sleep-Funktion den Haupt-Thread?
Zumindest können Sie die aktuelle Zeit mit 'gettimeofday' oder' clock_gettime' abrufen und nur die Zeit einplanen, die für die nächste Aktivität fehlt. – Marian
C11-Entwurfsstandard n1570: * 5.1.2.4 Multi-Thread-Ausführungen und Datenrennen 4 Zwei Ausdrucksauswertungen stehen in Konflikt, wenn einer von ihnen einen Speicherort ändert und der andere den gleichen Speicherort liest oder ändert. 25 Die Ausführung eines Programms enthält ein Datenrennen, wenn es zwei widersprüchliche Aktionen in verschiedenen Threads enthält, von denen mindestens einer nicht atomar ist und keiner vor dem anderen auftritt. Ein solches Datenrennen führt zu undefiniertem Verhalten. * TL; DR: 'sleep()' ist keine Synchronisation. – EOF