/* Code Listing 6.6:
Passing a pointer to a variable that repeatedly changes is a common error with threads
*/
/* BAD CODE - DON'T DO THIS */
/* What value is actually passed to the thread? */
for [int i = 1; i second = "Hello";
/* Note that the data structure resides on the heap */
assert [pthread_create [&child, NULL, hello_thread, args] == 0];
3] từ chính bản thân
/* Code Listing 6.8:
A safer version of Code Listing 6.5
*/
/* Convention: It is common to name a void* parameter with a name
that begins with _, then cast it to a local variable that has
the same [or nearly the same] name without the _. So _args will
become args. Recall that _ has no special meaning and is treated
like a normal alphabetical character. */
void *
child_thread [void *_args]
{
/* Safe whenever size of int second = "Hello";
/* Note that the data structure resides on the heap */
assert [pthread_create [&child, NULL, hello_thread, args] == 0];
8], con trỏ được trả về với
/* Code Listing 6.6:
Passing a pointer to a variable that repeatedly changes is a common error with threads
*/
/* BAD CODE - DON'T DO THIS */
/* What value is actually passed to the thread? */
for [int i = 1; i second];
/* Do not forget to free the struct used for arguments */
free [args];
pthread_exit [NULL];
}
0 để phân bổ lại ví dụ kết quả
/* Code Listing 6.8:
A safer version of Code Listing 6.5
*/
/* Convention: It is common to name a void* parameter with a name
that begins with _, then cast it to a local variable that has
the same [or nearly the same] name without the _. So _args will
become args. Recall that _ has no special meaning and is treated
like a normal alphabetical character. */
void *
child_thread [void *_args]
{
/* Safe whenever size of int