Are fts_read and fts_children not thread safe?
This answer recommends fts
as a good way to have a reentrant filesystem traversal. While reading the manpages, however, I noticed that fts_read
and fts_children
are marked as MT-Unsafe
.
I could not find anywhere information on why it was marked as such. I found this thread, so I suspect the reason is because of chdir
being called (two threads will try to chdir
the process at the same time, it can't be good).
If that is so, I guess that passing FTS_NOCHDIR
would be enough to have thread safety. Is there any other reason I don't see?
(And for the record, I'm very surprised that we came to this day without having a good reentrant, reasonable to use way of scanning through a filesystem tree! Seriously? ☺)
c linux bsd
add a comment |
This answer recommends fts
as a good way to have a reentrant filesystem traversal. While reading the manpages, however, I noticed that fts_read
and fts_children
are marked as MT-Unsafe
.
I could not find anywhere information on why it was marked as such. I found this thread, so I suspect the reason is because of chdir
being called (two threads will try to chdir
the process at the same time, it can't be good).
If that is so, I guess that passing FTS_NOCHDIR
would be enough to have thread safety. Is there any other reason I don't see?
(And for the record, I'm very surprised that we came to this day without having a good reentrant, reasonable to use way of scanning through a filesystem tree! Seriously? ☺)
c linux bsd
Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?
– Britton Kerin
Nov 24 '18 at 22:22
@BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)
– Dacav
Nov 26 '18 at 7:11
add a comment |
This answer recommends fts
as a good way to have a reentrant filesystem traversal. While reading the manpages, however, I noticed that fts_read
and fts_children
are marked as MT-Unsafe
.
I could not find anywhere information on why it was marked as such. I found this thread, so I suspect the reason is because of chdir
being called (two threads will try to chdir
the process at the same time, it can't be good).
If that is so, I guess that passing FTS_NOCHDIR
would be enough to have thread safety. Is there any other reason I don't see?
(And for the record, I'm very surprised that we came to this day without having a good reentrant, reasonable to use way of scanning through a filesystem tree! Seriously? ☺)
c linux bsd
This answer recommends fts
as a good way to have a reentrant filesystem traversal. While reading the manpages, however, I noticed that fts_read
and fts_children
are marked as MT-Unsafe
.
I could not find anywhere information on why it was marked as such. I found this thread, so I suspect the reason is because of chdir
being called (two threads will try to chdir
the process at the same time, it can't be good).
If that is so, I guess that passing FTS_NOCHDIR
would be enough to have thread safety. Is there any other reason I don't see?
(And for the record, I'm very surprised that we came to this day without having a good reentrant, reasonable to use way of scanning through a filesystem tree! Seriously? ☺)
c linux bsd
c linux bsd
edited Nov 24 '18 at 17:38
Dacav
asked Nov 24 '18 at 17:28
DacavDacav
7,12144569
7,12144569
Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?
– Britton Kerin
Nov 24 '18 at 22:22
@BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)
– Dacav
Nov 26 '18 at 7:11
add a comment |
Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?
– Britton Kerin
Nov 24 '18 at 22:22
@BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)
– Dacav
Nov 26 '18 at 7:11
Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?
– Britton Kerin
Nov 24 '18 at 22:22
Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?
– Britton Kerin
Nov 24 '18 at 22:22
@BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)
– Dacav
Nov 26 '18 at 7:11
@BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)
– Dacav
Nov 26 '18 at 7:11
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53460671%2fare-fts-read-and-fts-children-not-thread-safe%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53460671%2fare-fts-read-and-fts-children-not-thread-safe%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?
– Britton Kerin
Nov 24 '18 at 22:22
@BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)
– Dacav
Nov 26 '18 at 7:11