Ik wil voor een nieuw projectje een stapel threads via een fastcgi interface laten kletsen met de webserver daemon. Nu is er wel een multithread voorbeeld welke werkt met de fastcgi library, maar wilde even zeker weten of deze threadsafe was en ging wat graven. Ik vond het namelijk wat verdacht dat het ding zonder enige locks kan werken in de library zelf, er is immers maar 1 socket uiteindelijk waar alles overheen moet.
Lang verhaal kort; die library schrijft (onafhankelijke - dus de volgorde maakt niet uit, zolang ze maar 'in één keer' weggeschreven worden) buffers weg via een enkele write() naar de socket file descriptor. Is write gegarandeerd threadsafe? Het enige relevante wat ik kon opgraven via google was deze LWN pagina, maar die is uit 2006 en weet niet of de patch uiteindelijk daadwerkelijk in de linux kernel is beland. Nu wil ik uiteindelijk straks wel platform onafhankelijk zijn (zit straks te devven op een mac) dus als er soortgelijke "gotcha's" zijn onder andere besturingsystemen wil ik dat nu eigenlijk wel alvast weten.
Verder vertelt de manpage op m'n mac niets over thread safety, en zijn er geen garanties voor zover ik kon zien dat alle data in één keer wordt weggeschreven (ik wil wel gewoon blocking IO doen verder - ik zie niet direct een voordeel om nonblocking te gebruiken als ik al threads toe pas) dus lijkt me dat het simpelweg aanroepen van een write op een gedeelde fd in meerdere threads niet safe is.
Heb ik het fout? Wel fijn om te weten voordat ik daadwerkelijk begin met eromheen werken via een extra mutex enzo.
Ja, we hebben het maar over een enkele mutex. Maar het blijft lomp als die helemaal niet nodig is en het frustreert me dat ik geen betrouwbare info erover kan vinden.
Lang verhaal kort; die library schrijft (onafhankelijke - dus de volgorde maakt niet uit, zolang ze maar 'in één keer' weggeschreven worden) buffers weg via een enkele write() naar de socket file descriptor. Is write gegarandeerd threadsafe? Het enige relevante wat ik kon opgraven via google was deze LWN pagina, maar die is uit 2006 en weet niet of de patch uiteindelijk daadwerkelijk in de linux kernel is beland. Nu wil ik uiteindelijk straks wel platform onafhankelijk zijn (zit straks te devven op een mac) dus als er soortgelijke "gotcha's" zijn onder andere besturingsystemen wil ik dat nu eigenlijk wel alvast weten.
Verder vertelt de manpage op m'n mac niets over thread safety, en zijn er geen garanties voor zover ik kon zien dat alle data in één keer wordt weggeschreven (ik wil wel gewoon blocking IO doen verder - ik zie niet direct een voordeel om nonblocking te gebruiken als ik al threads toe pas) dus lijkt me dat het simpelweg aanroepen van een write op een gedeelde fd in meerdere threads niet safe is.
Heb ik het fout? Wel fijn om te weten voordat ik daadwerkelijk begin met eromheen werken via een extra mutex enzo.
Ja, we hebben het maar over een enkele mutex. Maar het blijft lomp als die helemaal niet nodig is en het frustreert me dat ik geen betrouwbare info erover kan vinden.