Why aren't sync.WaitGroup, sync.Mutex reference types like channel, slices?
If Waitgroups and Mutex always needs to be passed by reference always, can't we make it a reference type (forbid the use of them as pass by value)? I mean is there any use case where we need to use them pass by value?
go concurrency
add a comment |
If Waitgroups and Mutex always needs to be passed by reference always, can't we make it a reference type (forbid the use of them as pass by value)? I mean is there any use case where we need to use them pass by value?
go concurrency
add a comment |
If Waitgroups and Mutex always needs to be passed by reference always, can't we make it a reference type (forbid the use of them as pass by value)? I mean is there any use case where we need to use them pass by value?
go concurrency
If Waitgroups and Mutex always needs to be passed by reference always, can't we make it a reference type (forbid the use of them as pass by value)? I mean is there any use case where we need to use them pass by value?
go concurrency
go concurrency
edited Nov 17 '18 at 18:30
Flimzy
37.4k96496
37.4k96496
asked Nov 17 '18 at 8:27
Abdul Rahman K
555416
555416
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
When you pass any argument as value, the value will get copied. Any modification these arguments will be local the the func
. When the func
exits those changes will be gone.
In case of a WaitGroup
or Mutex
you do not want this, as you want to share the state. If all modifications were local, you could not sync anything, as you would have many different copies with different states.
One valid case could be that you want to copy a WaitGroup
or Mutex
, but that would be very implicit code and hard for another developer to understand/maintain.
I totally agree with what you say. Does it make sense to forbid pass by value of waitgroups and mutex?
– Abdul Rahman K
Nov 17 '18 at 8:37
Hi. I just extended my answer. Hope that helps.
– mbuechmann
Nov 17 '18 at 8:38
Still there is this question of when would we want to copy a WaitGroup/ Mutex ?
– Abdul Rahman K
Nov 17 '18 at 8:40
That depends on your program or what you want to achieve. But I think it is always better to explicitly create a new one.
– mbuechmann
Nov 17 '18 at 8:42
Exactly the point, It's always better to create a new one. So can we restrict the pass by value ability of them?
– Abdul Rahman K
Nov 17 '18 at 8:45
|
show 2 more comments
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%2f53349547%2fwhy-arent-sync-waitgroup-sync-mutex-reference-types-like-channel-slices%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
When you pass any argument as value, the value will get copied. Any modification these arguments will be local the the func
. When the func
exits those changes will be gone.
In case of a WaitGroup
or Mutex
you do not want this, as you want to share the state. If all modifications were local, you could not sync anything, as you would have many different copies with different states.
One valid case could be that you want to copy a WaitGroup
or Mutex
, but that would be very implicit code and hard for another developer to understand/maintain.
I totally agree with what you say. Does it make sense to forbid pass by value of waitgroups and mutex?
– Abdul Rahman K
Nov 17 '18 at 8:37
Hi. I just extended my answer. Hope that helps.
– mbuechmann
Nov 17 '18 at 8:38
Still there is this question of when would we want to copy a WaitGroup/ Mutex ?
– Abdul Rahman K
Nov 17 '18 at 8:40
That depends on your program or what you want to achieve. But I think it is always better to explicitly create a new one.
– mbuechmann
Nov 17 '18 at 8:42
Exactly the point, It's always better to create a new one. So can we restrict the pass by value ability of them?
– Abdul Rahman K
Nov 17 '18 at 8:45
|
show 2 more comments
When you pass any argument as value, the value will get copied. Any modification these arguments will be local the the func
. When the func
exits those changes will be gone.
In case of a WaitGroup
or Mutex
you do not want this, as you want to share the state. If all modifications were local, you could not sync anything, as you would have many different copies with different states.
One valid case could be that you want to copy a WaitGroup
or Mutex
, but that would be very implicit code and hard for another developer to understand/maintain.
I totally agree with what you say. Does it make sense to forbid pass by value of waitgroups and mutex?
– Abdul Rahman K
Nov 17 '18 at 8:37
Hi. I just extended my answer. Hope that helps.
– mbuechmann
Nov 17 '18 at 8:38
Still there is this question of when would we want to copy a WaitGroup/ Mutex ?
– Abdul Rahman K
Nov 17 '18 at 8:40
That depends on your program or what you want to achieve. But I think it is always better to explicitly create a new one.
– mbuechmann
Nov 17 '18 at 8:42
Exactly the point, It's always better to create a new one. So can we restrict the pass by value ability of them?
– Abdul Rahman K
Nov 17 '18 at 8:45
|
show 2 more comments
When you pass any argument as value, the value will get copied. Any modification these arguments will be local the the func
. When the func
exits those changes will be gone.
In case of a WaitGroup
or Mutex
you do not want this, as you want to share the state. If all modifications were local, you could not sync anything, as you would have many different copies with different states.
One valid case could be that you want to copy a WaitGroup
or Mutex
, but that would be very implicit code and hard for another developer to understand/maintain.
When you pass any argument as value, the value will get copied. Any modification these arguments will be local the the func
. When the func
exits those changes will be gone.
In case of a WaitGroup
or Mutex
you do not want this, as you want to share the state. If all modifications were local, you could not sync anything, as you would have many different copies with different states.
One valid case could be that you want to copy a WaitGroup
or Mutex
, but that would be very implicit code and hard for another developer to understand/maintain.
edited Nov 17 '18 at 8:38
answered Nov 17 '18 at 8:34
mbuechmann
2,80121224
2,80121224
I totally agree with what you say. Does it make sense to forbid pass by value of waitgroups and mutex?
– Abdul Rahman K
Nov 17 '18 at 8:37
Hi. I just extended my answer. Hope that helps.
– mbuechmann
Nov 17 '18 at 8:38
Still there is this question of when would we want to copy a WaitGroup/ Mutex ?
– Abdul Rahman K
Nov 17 '18 at 8:40
That depends on your program or what you want to achieve. But I think it is always better to explicitly create a new one.
– mbuechmann
Nov 17 '18 at 8:42
Exactly the point, It's always better to create a new one. So can we restrict the pass by value ability of them?
– Abdul Rahman K
Nov 17 '18 at 8:45
|
show 2 more comments
I totally agree with what you say. Does it make sense to forbid pass by value of waitgroups and mutex?
– Abdul Rahman K
Nov 17 '18 at 8:37
Hi. I just extended my answer. Hope that helps.
– mbuechmann
Nov 17 '18 at 8:38
Still there is this question of when would we want to copy a WaitGroup/ Mutex ?
– Abdul Rahman K
Nov 17 '18 at 8:40
That depends on your program or what you want to achieve. But I think it is always better to explicitly create a new one.
– mbuechmann
Nov 17 '18 at 8:42
Exactly the point, It's always better to create a new one. So can we restrict the pass by value ability of them?
– Abdul Rahman K
Nov 17 '18 at 8:45
I totally agree with what you say. Does it make sense to forbid pass by value of waitgroups and mutex?
– Abdul Rahman K
Nov 17 '18 at 8:37
I totally agree with what you say. Does it make sense to forbid pass by value of waitgroups and mutex?
– Abdul Rahman K
Nov 17 '18 at 8:37
Hi. I just extended my answer. Hope that helps.
– mbuechmann
Nov 17 '18 at 8:38
Hi. I just extended my answer. Hope that helps.
– mbuechmann
Nov 17 '18 at 8:38
Still there is this question of when would we want to copy a WaitGroup/ Mutex ?
– Abdul Rahman K
Nov 17 '18 at 8:40
Still there is this question of when would we want to copy a WaitGroup/ Mutex ?
– Abdul Rahman K
Nov 17 '18 at 8:40
That depends on your program or what you want to achieve. But I think it is always better to explicitly create a new one.
– mbuechmann
Nov 17 '18 at 8:42
That depends on your program or what you want to achieve. But I think it is always better to explicitly create a new one.
– mbuechmann
Nov 17 '18 at 8:42
Exactly the point, It's always better to create a new one. So can we restrict the pass by value ability of them?
– Abdul Rahman K
Nov 17 '18 at 8:45
Exactly the point, It's always better to create a new one. So can we restrict the pass by value ability of them?
– Abdul Rahman K
Nov 17 '18 at 8:45
|
show 2 more comments
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f53349547%2fwhy-arent-sync-waitgroup-sync-mutex-reference-types-like-channel-slices%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