什么时候pthread_attr_t不是NULL?

时间:2017-03-25 22:48:56

标签: c multithreading arguments pthreads posix

除了 pthread_attr_t 之外,来自POSIX线程的pthread_create的所有参数都非常简单易懂。什么是 pthread_attr_t NULL 的初始化时间,方式和时间是什么?

我浏览了Linux man page。我发现的关于 pthread_attr_t 的说明是:

  • 语法:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.INTERNET" />
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.SET_ALWAYS_FINISH" />
    <uses-permission android:name="android.permission.SET_ORIENTATION" />
    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
    <uses-permission android:name="android.permission.BROADCAST_SMS"/>
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name="com.sagarmakhija1994.Framework.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    
        <receiver
            android:name="com.sagarmakhija1994.Framework.MyBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                <action android:name="android.service.notification.NotificationListenerService" />
                <action android:name="android.intent.ACTION_CLOSE_SYSTEM_DIALOGS" />
            </intent-filter>
        </receiver>
    </application>
    
  • 说明:

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void*),void *arg);
    

哪个不太清楚。我也在互联网上搜索,也没有任何明确的解释。那么,当 pthread_attr_t 不是 NULL 时?

有人可以对此有所了解吗?所有评论和反馈都受到高度赞赏。

1 个答案:

答案 0 :(得分:7)

您可以使用它创建一个分离的(不可连接的)线程,或者将线程的堆栈大小设置为非默认值以及其他属性。

请参阅POSIX规范:

(每个网址有两个功能 - pthread_attr_destroy()和&#39; get&#39;类似于&#39;设置&#39;功能。)

大多数情况下,您不需要修改这些内容。将NULL指针传递给pthread_create()等同于使用一组默认属性 - 这是pthread_attr_init()为您创建的属性。您可以通过函数更改要在pthread_attr_t对象中更改的属性,然后将该修改后的对象传递给pthread_create()

  

另一个没有明显理由的事情是来自pthread_create pthread_t数据类型定义的第一个参数。

所有POSIX线程类型都是不透明的 - 这是POSIX委员会经过深思熟虑的设计决策。你不能携带这种类型的东西。这使得实现更容易 - 您只能执行功能允许您执行的操作。最终,它也简化了程序员(用户)的生活;你不会被欺骗使用不会迁移到其他系统的POSIX实现的内部知识。