---
name: "SDL_InitState"
section: "3type"
platform: "linux"
package: "libsdl3-doc"
version: "3.2.10+ds-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SDL_InitState"
---

# SDL\_InitState(3type)

A structure used for thread-safe initialization and shutdown.

## NAME

SDL\_InitState - A structure used for thread-safe initialization and shutdown.

## HEADER FILE

Defined in SDL3/SDL\_mutex.h

## SYNOPSIS

```
#include "SDL3/SDL.h"
```

**typedef struct SDL\_InitState** **{**     **SDL\_AtomicInt status;**     **SDL\_ThreadID thread;**     **void \*reserved;** **} SDL\_InitState;**

## DESCRIPTION

Here is an example of using this:

-

  ```
     static SDL_AtomicInitState init;
     bool InitSystem(void)
     {
         if (!SDL_ShouldInit(&init)) {
             // The system is initialized
             return true;
         }
         // At this point, you should not leave this function without calling SDL_SetInitialized()
         bool initialized = DoInitTasks();
         SDL_SetInitialized(&init, initialized);
         return initialized;
     }
     bool UseSubsystem(void)
     {
         if (SDL_ShouldInit(&init)) {
             // Error, the subsystem isn't initialized
             SDL_SetInitialized(&init, false);
             return false;
         }
         // Do work using the initialized subsystem
         return true;
     }
     void QuitSystem(void)
     {
         if (!SDL_ShouldQuit(&init)) {
             // The system is not initialized
             return;
         }
         // At this point, you should not leave this function without calling SDL_SetInitialized()
         DoQuitTasks();
         SDL_SetInitialized(&init, false);
     }
  ```

Note that this doesn't protect any resources created during initialization, or guarantee that nobody is using those resources during cleanup. You should use other mechanisms to protect those, if that's a concern for your code.

## AVAILABILITY

This struct is available since SDL 3.2.0.
