คำถามติดแท็ก pthreads

Pthreads (POSIX Threads) เป็น API ที่ใช้ C มาตรฐานสำหรับการสร้างและจัดการเธรด ปัจจุบันถูกกำหนดโดย POSIX.1-2008 (IEEE Std 1003.1, 2013 Edition / The Open Group Base Specifications Issue 7)

14
การอ้างอิงที่ไม่ได้กำหนดถึง pthread_create ใน Linux
ฉันเลือกตัวอย่างต่อไปนี้จากเว็บจากhttps://computing.llnl.gov/tutorials/pthreads/ #include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { long tid; tid = (long)threadid; printf("Hello World! It's me, thread #%ld!\n", tid); pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc; long t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %ld\n", t); rc = …


3
cmake และ libpthread
ฉันกำลังใช้RHEL 5.1งานอยู่gccอยู่ ฉันcmakeจะบอกให้เพิ่ม-pthreadในการรวบรวมและการเชื่อมโยงได้อย่างไร
188 pthreads  cmake 

10
เหตุใดฟังก์ชันตัวแปรเงื่อนไขของ pthreads จึงจำเป็นต้องมี mutex
ฉันอ่านบนpthread.h; ฟังก์ชันเงื่อนไขที่เกี่ยวข้องกับตัวแปร (เช่นpthread_cond_wait(3)) ต้องการ mutex เป็นอาร์กิวเมนต์ ทำไม? เท่าที่ผมสามารถบอกได้ว่าผมจะได้รับการสร้าง mutex เพียงเพื่อใช้เป็นข้อโต้แย้งที่? Mutex นั้นควรทำอะไร?

5
C ++ 11 std :: threads vs เธรด posix
ทำไมฉันจึงควรเลือกอย่างใดอย่างหนึ่งในทางปฏิบัติ อะไรคือความแตกต่างทางเทคนิคยกเว้นstd::threadชั้นเรียน

5
ยังรั่วไหลได้ที่ตรวจพบโดย Valgrind
ฟังก์ชั่นทั้งหมดที่กล่าวถึงในบล็อกนี้เป็นฟังก์ชั่นห้องสมุด ฉันจะแก้ไขการรั่วไหลของหน่วยความจำนี้ได้อย่างไร มันอยู่ภายใต้หมวดหมู่" ยังเข้าถึงได้ " (มีอีก 4 ซึ่งคล้ายกันมาก แต่มีขนาดแตกต่างกัน) 630 bytes in 1 blocks are still reachable in loss record 5 of 5 at 0x4004F1B: calloc (vg_replace_malloc.c:418) by 0x931CD2: _dl_new_object (dl-object.c:52) by 0x92DD36: _dl_map_object_from_fd (dl-load.c:972) by 0x92EFB6: _dl_map_object (dl-load.c:2251) by 0x939F1B: dl_open_worker (dl-open.c:255) by 0x935965: _dl_catch_error (dl-error.c:178) by 0x9399C5: _dl_open …
155 c  pthreads  valgrind 

4
ทำไม pthread_cond_wait ถึงมีการปลุกที่ผิดพลาด?
ในการอ้างถึงหน้าคน: เมื่อใช้ตัวแปรเงื่อนไขจะมีเพรดิเคตของบูลีนที่เกี่ยวข้องกับตัวแปรที่แชร์ซึ่งเกี่ยวข้องกับแต่ละเงื่อนไขรอซึ่งเป็นจริงถ้าเธรดควรดำเนินการต่อ การปลุกที่เกิดขึ้นจริงจาก pthread_cond_timedwait () หรือฟังก์ชั่น pthread_cond_wait () อาจเกิดขึ้นได้ เนื่องจากการส่งคืนจาก pthread_cond_timedwait () หรือ pthread_cond_wait () ไม่ได้มีความหมายอะไรเกี่ยวกับมูลค่าของเพรดิเคตนี้เพรดิเคตควรได้รับการประเมินอีกครั้งเมื่อส่งคืนดังกล่าว ดังนั้นpthread_cond_waitสามารถส่งคืนแม้ว่าคุณจะไม่ได้ส่งสัญญาณ อย่างน้อยครั้งแรกที่ดูเหมือนว่าเลวร้าย มันจะเป็นฟังก์ชั่นที่สุ่มคืนค่าผิดหรือสุ่มคืนก่อนที่มันจะถึงคำสั่ง return ที่เหมาะสม ดูเหมือนว่าเป็นข้อบกพร่องที่สำคัญ แต่ความจริงที่ว่าพวกเขาเลือกที่จะจัดทำเอกสารนี้ในหน้าคนมากกว่าแก้ไขดูเหมือนว่าจะมีเหตุผลที่ถูกต้องว่าทำไมpthread_cond_waitตื่นขึ้นมาอย่างเก๊ สันนิษฐานว่ามีบางอย่างที่แท้จริงเกี่ยวกับวิธีการทำงานที่ทำให้ไม่สามารถช่วยเหลือได้ คำถามคืออะไร ทำไมไม่pthread_cond_waitกลับ spuriously? ทำไมถึงไม่สามารถรับประกันได้ว่าจะมีการปลุกเมื่อมีการส่งสัญญาณอย่างถูกต้องเท่านั้น ทุกคนสามารถอธิบายเหตุผลของพฤติกรรมหลอกลวงได้หรือไม่
145 c  pthreads 

2
ความสำคัญของแฟล็ก -pthread เมื่อรวบรวม
ในโปรเจ็กต์ C และ C ++ แบบมัลติเธรดที่หลากหลายฉันได้เห็นการ-pthreadตั้งค่าสถานะที่ใช้กับทั้งการคอมไพล์และการเชื่อมโยงสเตจในขณะที่คนอื่นไม่ได้ใช้เลยและผ่าน-lpthreadไปยังสเตจลิงก์ มีอันตรายใดบ้างที่ไม่ได้รวบรวมและเชื่อมโยงกับ-pthreadธง - นั่นคือสิ่งที่จะ-pthreadทำจริง ๆ ? ฉันสนใจแพลตฟอร์ม Linux เป็นหลัก
143 c++  c  linux  pthreads 

3
หัวข้อ mingw-w64: posix vs win32
ฉันกำลังติดตั้ง mingw-w64 บน Windows และมีสองตัวเลือก: เธรด win32 และเธรด posix ฉันรู้ว่าอะไรคือความแตกต่างระหว่างเธรด win32 และ pthreads แต่ฉันไม่เข้าใจว่าความแตกต่างระหว่างสองตัวเลือกนี้คืออะไร ฉันสงสัยว่าถ้าฉันจะเลือกเธรด posix มันจะป้องกันไม่ให้ฉันเรียกใช้ฟังก์ชัน WinAPI เช่น CreateThread ดูเหมือนว่าตัวเลือกนี้จะระบุว่าโปรแกรมหรือไลบรารีของเธรดใดจะถูกใช้ แต่โดยอะไร โดย GCC, libstdc ++ หรืออย่างอื่น? ฉันพบสิ่งนี้: ความแตกต่างระหว่าง thread_posixs และ thread_win32 ในพอร์ต gcc ของ windows คืออะไร? กล่าวโดยย่อสำหรับ mingw เวอร์ชันนี้ threads-posix release จะใช้ posix API และอนุญาตให้ใช้ std :: thread และ …
129 windows  gcc  pthreads  mingw 


8
อาร์กิวเมนต์หลายรายการในฟังก์ชันที่เรียกโดย pthread_create ()?
ฉันต้องการส่งผ่านอาร์กิวเมนต์หลายรายการไปยังฟังก์ชันที่ฉันต้องการเรียกใช้ในเธรดแยกต่างหาก ฉันได้อ่านมาว่าวิธีการทั่วไปในการทำเช่นนี้คือการกำหนดโครงสร้างส่งผ่านฟังก์ชันตัวชี้ไปยังสิ่งนั้นและหักล้างค่าสำหรับอาร์กิวเมนต์ อย่างไรก็ตามฉันไม่สามารถใช้งานได้: #include <stdio.h> #include <pthread.h> struct arg_struct { int arg1; int arg2; }; void *print_the_arguments(void *arguments) { struct arg_struct *args = (struct arg_struct *)args; printf("%d\n", args -> arg1); printf("%d\n", args -> arg2); pthread_exit(NULL); return NULL; } int main() { pthread_t some_thread; struct arg_struct args; args.arg1 = 5; args.arg2 …
96 c  pthreads 


4
Re-entrant lock และแนวคิดโดยทั่วไปคืออะไร?
ฉันมักจะสับสน จะมีใครอธิบายได้ไหมว่าReentrantหมายถึงอะไรในบริบทต่างๆ แล้วทำไมคุณถึงต้องการใช้ reentrant กับ non-reentrant? พูดว่า pthread (posix) กำลังล็อค primitives พวกเขากลับเข้ามาใหม่หรือไม่? ข้อผิดพลาดใดที่ควรหลีกเลี่ยงเมื่อใช้? mutex re-entrant หรือไม่

4
PTHREAD_MUTEX_INITIALIZER เทียบกับ pthread_mutex_init (& mutex, param)
มีความแตกต่างระหว่าง pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; หรือ pthread_mutex_t lock; pthread_mutex_init ( &lock, NULL); ฉันปลอดภัยเพียงพอหรือไม่หากใช้เพียงวิธีแรก หมายเหตุ:คำถามของฉันส่วนใหญ่หมายถึงโปรแกรมขนาดเล็กมากซึ่งสิ่งที่ฉันจะทำมากที่สุดคือเชื่อมต่อไคลเอนต์หลายรายเข้ากับเซิร์ฟเวอร์และแก้ไขข้อสงสัยด้วยเธรดของผู้ปฏิบัติงาน
92 c  ubuntu  pthreads  mutex 

9
ฟังก์ชัน pthread จากคลาส
สมมติว่าฉันมีคลาสเช่น class c { // ... void *print(void *){ cout << "Hello"; } } แล้วผมก็มีเวกเตอร์ของ c vector<c> classes; pthread_t t1; classes.push_back(c()); classes.push_back(c()); ตอนนี้ฉันต้องการสร้างเธรดบน c.print(); และสิ่งต่อไปนี้ทำให้ฉันมีปัญหาด้านล่าง: pthread_create(&t1, NULL, &c[0].print, NULL); ข้อผิดพลาด Ouput: ไม่สามารถแปลง 'void * (tree_item ::) (void )' เป็น 'void * ( ) (void )' สำหรับอาร์กิวเมนต์ '3' ถึง 'int pthread_create …
86 c++  pthreads 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.