Angesichts der folgenden Bit-Code, ich frage mich, was das entsprechende Bit des Codes wäre in Linux unter Annahme pthreads oder sogar mit der Boost.Thread-API.Äquivalent von SetThreadPriority unter Linux (Pthreads)
Antwort
Das Äquivalent zu SetThreadPriority
in Linux wäre pthread_setschedprio(pthread_t thread, int priority)
.
Überprüfen Sie die man page.
EDIT: Hier ist der Beispielcode äquivalent:
#include <pthread.h>
int main()
{
pthread_t thId = pthread_self();
pthread_attr_t thAttr;
int policy = 0;
int max_prio_for_policy = 0;
pthread_attr_init(&thAttr);
pthread_attr_getschedpolicy(&thAttr, &policy);
max_prio_for_policy = sched_get_priority_max(policy);
pthread_setschedprio(thId, max_prio_for_policy);
pthread_attr_destroy(&thAttr);
return 0;
}
Diese Probe ist für die Standard-Planungsrichtlinie, die SCHED_OTHER ist.
EDIT: Thread-Attribut muss vor der Verwendung initialisiert werden.
So etwas wie pthread_setschedparam()
und Kombination von Politik und Priorität.
Ich denke, Sie würden Richtlinien SCHED_FIFO, SCHED_RR
verwenden, wo Sie die Priorität des Threads angeben können.
Sie wollen:
#include <pthread.h>
int main()
{
int policy;
struct sched_param param;
pthread_getschedparam(pthread_self(), &policy, ¶m);
param.sched_priority = sched_get_priority_max(policy);
pthread_setschedparam(pthread_self(), policy, ¶m);
return 0;
}
Der POSIX-Standard umfasst pthread_setschedparam(3)
, wie von verschiedenen anderen Antworten erwähnt. Meistens wird diese POSIX-Thread-Bibliotheksfunktion erwähnt, wenn von Echtzeit-Threads gesprochen wird, aber der POSIX-Standard beschränkt seine Verwendung nicht ausschließlich auf die Domäne von Echtzeit-Threads. In Linux ist seine Verwendung jedoch nur dann sinnvoll, wenn die Echtzeit-Scheduling-Klassen SCHED_FIFO
oder SCHED_RR
verwendet werden, da nur diese Scheduling-Klassen mehr als einen Wert für den Prioritätsparameter zulassen. Sehen Sie dieses stack overflow answer für eine Illustration.
Glücklicherweise oder leider ist es eine Frage der Perspektive, scheint es sowohl Hauptstrom Linux POSIX Thread-Bibliothek Implementierungen (die veralteten LinuxThreads und die aktuelle NPTL-Implementierung) nicht vollständig POSIX-konform, in dem der "nette Wert" ist nicht Prozess spezifische, aber Thread-spezifische Parameter, so scheint es, Sie könnten setpriority(3)
verwenden, um die Nettigkeit eines Threads in Linux zu ändern. Dieser Anspruch basiert auf den Kompatibilitätshinweisen in der Handbuchseite pthreads(7)
(Suche nach "nettem Wert" auf dieser Seite); Ich habe tatsächlich nicht in der Praxis getestet (einfache Sache zu tun).
Sollten Sie sich dazu entschließen, die POSIX-konforme Methode zum Ändern der Thread-Nice zu verwenden, beachten Sie, dass es die lauernde Möglichkeit gibt, dass jemand die genannte Nichteinhaltung korrigiert. In diesem Fall scheint es keine Möglichkeit zu geben, den Thread zu ändern Priorität in Linux, wenn die normale Scheduling-Klasse verwendet wird (SCHED_OTHER
).
Für diejenigen, die nach BSD-basierten OS-Lösungen wie MacOS oder iOS suchen, sollten Sie in Erwägung ziehen, die Priorität des Threads bei Bedarf mit mach anstelle des POSIX-Äquivalents festzulegen.
#include <mach/mach_init.h>
#include <mach/thread_policy.h>
#include <mach/sched.h>
#include <pthread.h>
int set_realtime(int period, int computation, int constraint) {
struct thread_time_constraint_policy ttcpolicy;
int ret;
thread_port_t threadport = pthread_mach_thread_np(pthread_self());
ttcpolicy.period=period; // HZ/160
ttcpolicy.computation=computation; // HZ/3300;
ttcpolicy.constraint=constraint; // HZ/2200;
ttcpolicy.preemptible=1;
if ((ret=thread_policy_set(threadport,
THREAD_TIME_CONSTRAINT_POLICY, (thread_policy_t)&ttcpolicy,
THREAD_TIME_CONSTRAINT_POLICY_COUNT)) != KERN_SUCCESS) {
fprintf(stderr, "set_realtime() failed.\n");
return 0;
}
return 1;
}
- 1. Signalverarbeitung unter Pthreads
- 2. #pragma Kommentar (lib, "xxx.lib") äquivalent unter Linux?
- 3. wait() blockiert nicht, in Linux und Pthreads
- 4. Wie sind Pthreads auf Linux von Scheduler gesehen
- 5. Verteilen von Software unter Linux?
- 6. Linux-Äquivalent von GetCommandLine und CommandLineToArgv?
- 7. Windows-Beep() Äquivalent für Linux
- 8. Ist sched_getcpu() unter Linux zuverlässig?
- 9. C Linux-Äquivalent von Fenstern Queryperformancecounter
- 10. Was ist Linux-Äquivalent von LPTSTR & LPCSTR?
- 11. Löschen von .rbenv unter Linux
- 12. Verwenden von JProfiler unter Linux
- 13. Entwickeln von C# unter Linux
- 14. Verwendung von ios_webkit_debug_proxy unter Linux
- 15. Pthreads vs OpenMP
- 16. Nice-Level für Pthreads?
- 17. Gibt es ein Linux-Äquivalent von Windows "Resource Files"?
- 18. Gibt es ein Äquivalent von Tail -f unter Windows?
- 19. Was ist das Linux-Äquivalent zu MAXDWORD?
- 20. Kann ich den Namen eines Threads in Pthreads/Linux setzen?
- 21. Echtzeit-Audioanalyse unter Linux
- 22. Programmierung Webcam unter Linux
- 23. Verwenden von gprof mit Pthreads
- 24. OpenCL Kompilieren unter Linux
- 25. MASM unter Linux?
- 26. windeployqt.exe unter Linux-Distributionen
- 27. Herunterfahren unter Linux abbrechen?
- 28. ARM-Entwicklung unter Linux
- 29. Squeak SMTPs unter Linux
- 30. Benötige ich -D_REENTRANT mit -pthreads?
Sie nicht einen Zeiger auf ein uninitialised 'pthread_attr_t' zu' pthread_attr_getschedpolicy() 'passieren kann. – caf
@caf Danke für den Hinweis. Ich habe das Code-Snippet aktualisiert. –
Beachten Sie, dass, obwohl der POSIX-Standard (nach dem Link von der bereitgestellten 'phtread__setschedprio (3)' Handbuchseite zu http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html # tag_02_08_04_01) erwähnt 'pthread_setschedprio (3)' für Threads, die in der 'SCHED_OTHER' Richtlinie laufen, in Linux ist der Wertebereich für den Prioritätswert' [0, 0] 'und macht diese Antwort für Linux unbrauchbar, es sei denn, sie wurde reell verwendet Zeitplanungsklassen ('SCHED_FIFO' oder' SCHED_RR'), die von der Frage nicht aufgerufen werden. – FooF