Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从多线程同步文件写入_C_Multithreading_Mutex - Fatal编程技术网

C 如何从多线程同步文件写入

C 如何从多线程同步文件写入,c,multithreading,mutex,C,Multithreading,Mutex,嘿,这里我有以下问题:我有一种“注册”函数,它在一个文件上写入,该文件是从insied线程调用的,因此程序的行为如下: main() | ---------------------------------------- | | | *thread 1

嘿,这里我有以下问题:我有一种“注册”函数,它在一个文件上写入,该文件是从insied线程调用的,因此程序的行为如下:

                        main()
                         |
        ----------------------------------------
        |                 |                    |                  
       *thread 1       *thread2             *thread3
        |                 |                    |
      Register           Register            Register  
        |                 |                    |
        ----------------------------------------
                          |
                       sameFile
现在的问题是:我是否可以在寄存器函数的关键部分使用互斥锁(检查用户是否已写入文件,然后再写入文件),即使寄存器函数本身不是线程,但它是由线程调用的?
或者在调用Register函数之前,我应该在线程中使用互斥体吗?

您可以在任何有意义的地方使用互斥体

没有函数是线程,它们都只是函数-其中一个函数是线程启动时第一个调用的函数。虽然这可能是由内部库函数调用的,但它实际上并不比它稍后调用的任何其他函数更特殊


在函数中使用互斥体(您希望从多个线程调用)来保护共享资源正是正常的使用情况。

您可以在任何地方使用互斥体。函数不是线程。你不能没有一个线程。如果它是从一个线程调用的,它是在一个线程上运行的。线程不是函数,函数也不是线程。它是一种高级执行原语。如果您需要在线程中调用函数并使用互斥来保护这些函数的关键部分,您可以这样做。非常感谢,实际上我对线程这个概念还不太熟悉。。另外,如果你有一些关于线程的好资源,我很乐意阅读它们!